入口函數
每一個Win32程序都有一個入口函數,一般來說入口函數的名字是WinMain。
在大多數的Win32程序中,WinMain函數要爲應用程序完成以下幾個步驟:
1.註冊窗口類
2.創建主窗口
3.創建消息循環
1.註冊窗口類
每個窗口必須有一個窗口類。窗口類定義了一個窗口的屬性,例如樣式,圖標,光標,菜單名稱和窗口過程名稱。
第一步是用類信息填充一個WNDCLASS結構。然後把WNDCLASS結構傳遞給RegisterClass函數。示例程序創建窗口類GenericAppClass的過程如下:
wc.lpszClassName="GenericAppClass";
wc.lpfnWndProc=MainWndProc;
wc.style=CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
wc.hInstance=hInstance;
wc.hCursor=LoadIcon(NULL,IDI_APPLICATION);
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName="GenericAPPMenu";
wc.cbClsExtra=0;
wc.cbWndExtra=0;
RegisterClass(&wc);
2.創建主窗口
你可以通過調用CreatWindow函數來創建窗口,示例程序創建窗口的過程如下:
hWnd = CreateWindow( "GenericAppClass",
"Generic Application",
WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,
0,
0,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
第一個參數是之前註冊過的類的名字。剩下的參數指定了其它窗口屬性。調用這個函數可以創建一個窗口,但是你只有在這之後調用ShowWindow這個函數,系統纔會顯示之前創建的窗口。示例程序顯示窗口過程如下:
ShowWindow(hWnd,nCmdShow);
3.創建消息循環
一旦主窗口被創建和顯示,WinMain函數可以執行它的主任務,即從示例程序消息隊列中讀取消息,然後把消息分配給適合的窗口處理。
系統不會直接把輸入傳遞給應用程序。它會把用戶通過鼠標和鍵盤的輸入的消息同系統消息,其它應用程序消息一起,放到消息隊列中。示例程序必須從消息隊列中獲取這些輸入消息,然後分配給可以處理這些消息的窗口處理過程。
示例程序使用的消息循環如下:
while( GetMessage( &msg, NULL, 0, 0 ) ){
TranslateMessage( &msg );
DispatchMessage( &msg );
}
GetMessage函數可以從消息隊列中獲取消息。DispatchMessage函數可以把消息分配給合適的窗口處理過程。TranslateMessage函數可以把虛擬鍵碼(virtual-key)翻譯成字符消息。