Posted on 2008-10-17 20:59
千張 閱讀(823)
評論(1) 編輯 收藏 引用 所屬分類:
C++/VS.NET
<1>.入口函數WinMain中的代碼
1.窗口類WNDCLASS
設置窗口的各個參數
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); //指定窗體的顏色。(畫刷)
wndcls.hCursor=LoadCursor(0,IDC_IBEAM);
wndcls.hIcon=LoadIcon(0,IDI_WARNING);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="myfirst2006";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
2.注冊窗口函數
RegisterClass(&wndcls);
3.產生窗口
HWND hwnd;
hwnd=CreateWindow("myfirst2006","我的第一個窗口!",WS_OVERLAPPEDWINDOW,
100,100,600,400,NULL,NULL,hInstance,NULL);
4.顯示窗口
ShowWindow(hwnd,SW_SHOWNORMAL);
5.更新窗口
UpdateWindow(hwnd);
6.消息循環
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
TranslateMessage轉換消息,轉換WM_CHAR消息,若不用,則不能收到WM_CHAR消息。
DispatchMessage將消息分發出去,將收到的消息傳到操作系統,然后操作系統調用窗口過程函數,也就是對 設計窗口時的回調函數進行處理。
<2>.回調函數WinSunProc中的代碼:
舉個例子:
switch(uMsg)
{
case WM_CHAR:
char szchar[20];
sprintf(szchar,"char is %d",wParam);
MessageBox(hwnd,szchar,"myfirst2006",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse click","myfirst",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,100,100,"這是我的第一個窗口,哈哈!",strlen("這是我的第一個窗口,哈哈!"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDc;
PAINTSTRUCT ps;
hDc=BeginPaint(hwnd,&ps);
TextOut(hDc,50,50,"hello my windows!",strlen("hello my windows!"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的退出程序?","myfirst",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
uMsg為消息標識符
WM_CHAR消息為字符類消息
WM_LBUTTONDOWN為鼠標消息,WM_PAINT為窗口重繪消息,當窗口大小發生變化時,點鼠標左鍵出來的那行文字又沒有了,因為窗口又重新粉刷了一遍
WM_CLOSE為關閉窗口的消息
WM_DESTROY為銷毀窗口的消息。
HDC是一個DC的句柄,它將窗口與GDI(Graphics Device Interface圖像設備接口)連接起來,如果程序需要在窗 口上繪制圖形,則需要建立一個DC設備,即定義一個HDC變量。
在生成窗口時,HWND使操作系統分配的句柄與我的窗口相關并保存。
HINSTANCE產生了一個與我們的程序相關的實例,HINSTANCE變量是操作系統給其賦值。