win32API 入口WinMain()內部機理
阿新 • • 發佈:2017-05-15
ear brush red wndproc 調用約定 函數 line edraw con
win32API 入口WinMain()內部機理
- 入口 WinMain()
- 前面戴兩重“帽子”:一個"int"是指返回值; 一個WINAPI指“調用約定”。
- 後面有四個參數:
- HINSTANCE hInstance, 由操作系統生成的“當前實例句柄”。
- HINSTANCE hPrevInstance,"先前實例句柄"----已經遭廢棄,以前有用到過,現在已無用。“二貨”都會遭到”白眼“,一般賦值null。
- LPSTR lpCmdLine,由外部傳遞進來的命令行,如:用記事本打開一個txt文件,內裏實現是把txt文件路徑傳入記事本程序,而記事本也要從入口WinMain()進入的,LPSTR lpCmdLine就來接收此路徑參數。
- int nShowCmd 顯示參數,由操作系統指定。
- WNDCLASSEX 結構用於註冊窗口類
- cbSize:
- wcex.cbSize = sizeof( WNDCLASSEX );
- WNDCLASSEX 的大小。我們可以用sizeof(WNDCLASSEX)來獲得準確的值。
- cbClsExtra:
- wcex.cbClsExtra = 0;
- 指定緊跟在窗口類結構後的附加字節數。窗口類關聯的一個額外的空間。基本已經用不到。
- cbWndExtra:
- wcex.cbWndExtra = 0;
- 指定緊跟在窗口事例後的附加字節數。如果一個應用程序在資源中用CLASS偽指令註冊一個對話框類時,則必須把這個成員設成DLGWINDOWEXTRA。窗口關聯的一個額外的空間。
- hbrBackground:
- wcex.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );
- 背景畫刷的句柄。
- hCursor:
- wcex.hCursor = LoadCursor( NULL, IDC_ARROW );
- 光標的句柄。
- hIcon:
- wcex.hIcon = LoadIcon( NULL, IDI_APPLICATION );
- 圖標的句柄,任務欄上面的圖標。
- hIconSm:
- wcex.hIconSm = LoadIcon( NULL, IDI_WINLOGO );
- 和窗口類關聯的小圖標。如果該值為NULL。則把hIcon中的圖標轉換成大小合適的小圖標。標題欄左邊的小圖標。
- hInstance:
- wcex.hInstance = hInstance;
- 本模塊的事例句柄。
- lpfnWndProc:
- wcex.lpfnWndProc = (WNDPROC) WndProc;
- 窗口處理函數的指針。
- WNDCLASSEX 中最重要的成員莫過於lpfnWndProc了。前綴 lpfn 表示該成員是一個指向函數的長指針。在 Win32中由於內存模式是 FLAT 型,所以沒有 near 或 far 的區別。每一個窗口類必須有一個窗口過程,當 Windows 把屬於特定窗口的消息發送給該窗口時,該窗口的窗口類負責處理所有的消息,如鍵盤消息或鼠標消息。由於窗口過程差不多智能地處理了所有的窗口消息循環,所以您只要在其中加入消息處理過程即可。
- lpszClassName:
- wcex.lpszClassName = "My Class";
- 指向類名稱的指針。
- lpszMenuName:
- wcex.lpszMenuName = NULL;
- 指向菜單的指針。
- style:
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- 從這個窗口類派生的窗口具有的風格。您可以用“or”操作符來把幾個風格或到一起。
- return RegisterClassEx( &wcex );
win32API 入口WinMain()內部機理