一、窗口類結構體簡介
窗口類結構體包含了窗口的各種參數信息。比如:窗口的圖標、菜單欄、背景顏色、窗口的消息處理等等。
窗口類結構體有兩個:WNDCLASS(早期版本) 和 WNDCLASSEX(新版本)。至於為什么有 WNDCLASSEX 還要保留老版本的 WNDCLASS?主要是為了兼容以前使用老版本開發的 Win32 程序才保留的。
二、窗口類結構體的成員變量
這里暫時只介紹新版本的 WNDCLASSEX,也更推薦使用新版本的。
typedef struct tagWNDCLASSEXW {
UINT cbSize; // 窗口類結構體的內存大小(new)
UINT style; // 類風格
WNDPROC lpfnWndProc; // 窗口的處理過程
int cbClsExtra; // 指定緊隨在 WNDCLASS 數據結構后分配的字節數
int cbWndExtra; // 指定緊隨在窗口實例之后分配的字節數
HINSTANCE hInstance; // 窗口類所在模塊的實例句柄
HICON hIcon; // 窗口類的圖標
HCURSOR hCursor; // 窗口類的光標
HBRUSH hbrBackground; // 窗口類的背景畫刷
LPCWSTR lpszMenuName; // 窗口類的菜單資源名
LPCWSTR lpszClassName; // 窗口類的名稱
HICON hIconSm; // 窗口類的任務欄圖標(new)
} WNDCLASSW
新版本比老版本只多了兩個成員變量:cbSize 和 hIconSm。
三、窗口類結構體的使用
示例代碼如下:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // 窗口類的消息處理過程
/* 新增版本的窗口類結構體 */
WNDCLASSEX wndclassex;
wndclassex.style = 0; // 窗口類型為缺省類型
wndclassex.lpfnWndProc = WndProc; // 定義窗口處理函數
wndclassex.cbClsExtra = 0; // 窗口類無擴展
wndclassex.cbWndExtra = 0; // 窗口實例無擴展
wndclassex.hInstance = hInstance; // 當前實例句柄
wndclassex.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 窗口的最小化圖標為缺省圖標
wndclassex.hCursor = LoadCursor(NULL, IDC_ARROW); // 窗口采用箭頭光標
wndclassex.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH)); // 窗口背景為白色
wndclassex.lpszMenuName = NULL; // 窗口無菜單
wndclassex.lpszClassName = L"CLASSNAME"; // 窗口類名
/* 新增的成員變量 */
wndclassex.cbSize = sizeof(WNDCLASSEX); // 窗口類的內存大小
wndclassex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // 窗口類菜單欄的圖標
參考:
Win32 程序開發:窗口類結構體WNDCLASS和WNDCLASSEX