Win32API全局窗口類的註冊與創建
阿新 • • 發佈:2017-05-15
zcl icon 全局 class border 字符 rbac 標題 def
Win32API全局窗口類的註冊
Win32API CreateWindow
Win32API 創建窗口類的查找過程
-
應用程序全局窗口類的註冊
-
typedef struct tagWNDCLASSEX {
- UINT cbSize; //結構體的大小,用sizeof得出
- UINT style; //窗口類的風格,默認設置左右畫出
- WNDPROC lpfnWndProc; //回調函數,窗口處理函數,幹活的人
- int cbClsExtra; //窗口類的附加數據Buff的大小
- int cbWndExtra; //窗口的附加數據Buff的大小
- HINSTANCE hInstance; //當前模塊的實例句柄
- HICON hIcon; //
- HCURSOR hCursor; //鼠標的句柄
- HBRUSH hbrBackground; //繪制窗口背景的畫刷句柄
- LPCTSTR lpszMenuName; //窗口菜單的資源ID字符串
- LPCTSTR lpszClassName; //窗口類的名稱
- HICON hIconSm; //窗口的小圖標句柄
- } WNDCLASSEX, *PWNDCLASSEX;
-
typedef struct tagWNDCLASSEX {
- 全局窗口類註冊,要在風格中增加CS_GLOBALCLASS,局部的窗口類則不添加此風格參數
例如: WNDCLASSEX wcex = {0}; wcex.stle = ... | CS_GLOBALCLASS;
- HWND CreateWindowEx( DWORD dwExStyle, //窗口的擴展風格 LPCTSTR lpClassName, //已經註冊的窗口類名稱 LPCTSTR lpWindowName, //窗口標題欄名字 DWORD dwStyle, //窗口的基本風格 int x, //窗口左上角水平坐標位置 int y, //窗口左上角垂直坐標位置 int nWidth, //窗口的寬度 int nHeight, //窗口的高度 HWND hWndParent, //窗口的父窗口句柄 HMENU hMenu, //
-
子窗口的創建
- 創建時要設置父窗口句柄
- 創建風格要增加WS_CHILD|WS_VISIBLE
-
1 根據傳入的ClassName,在“局部”窗口類中查找,
- 找到執行2,
- 未找到執行3。
-
2 比較“局部”窗口類與創建時傳入的“HINSTANCE變量”
- 相等則表示:創建和註冊的窗口類在同一模塊(同一進程創建),創建窗口並返回。
- 不等則表示:創建和註冊的窗口類不在同一模塊(不同的進程創建),繼續執行3。
-
3 在“全局”窗口類查找
- 找到執行4.
- 未找到執行5.
- 4 使用找到的窗口類的信息,創建窗口返回。
-
5 在“系統”窗口類中查找
- 找到則創建窗口返回。
- 未找到則創建窗口失敗。
Win32API全局窗口類的註冊與創建