Win32 程序开发:窗口类结构体 WNDCLASS 和 WNDCLASSEX

一、窗口类结构体简介

窗口类结构体包含了窗口的各种参数信息。比如:窗口的图标、菜单栏、背景颜色、窗口的消息处理等等。

窗口类结构体有两个: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

Windows编程——窗口类的注册


Win32 程序开发:窗口类结构体 WNDCLASS 和 WNDCLASSEX

上一篇:C#8.0中新特性之一:结构readonly成员


下一篇:C# WPF实用的注册窗体