WNDCLASS结构
Windows的窗口总是基于窗口类来创建的,窗口类同时确定了处理窗口的窗口过程(回调函数)。
在创建引用程序窗口之前,必须调用RegisterClass函数来注册窗口类,该函数只需要一个参数,即指向WNDCLASS窗口类的指针。因为WNDCLASS类包含了窗口所拥有的基本属性。
结构原型:
typedef struct tagWNDCLASSW {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCWSTR lpszMenuName;
LPCWSTR lpszClassName;
} WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;
成员解析:
成员 | 含义 | ||
---|---|---|---|
style | 指定窗口类型,各种“类风格”可以使用按位或操作符组合起来 | ||
IpfnWndProc | 指定窗口过程(必须是回调函数) | ||
cbClsExtra | 预留的额外空间,一般为0 | ||
cbWndExtra | 预留的额外空间,一般为0 | ||
hInstance | 应为程序的实例句柄 | ||
hIcon | 为所有基于该窗口类的窗口设定一个图标 | ||
hCursor | 为所有基于该窗口类的窗口设定一个鼠标指针 | ||
hbrBackground | 指定窗口背景色 | ||
IpszMenuName | 指定窗口菜单 | ||
IpszClassName | 指定窗口类名 |
style类风格解析
类风格 | 含义 | ||
---|---|---|---|
CS_VREDRAW | 移动或者调整窗口的高度(垂直方向)时,重绘整个窗口 | ||
CW_HREDRAW | 移动或者调整窗口的宽度(水平方向)时,重绘整个窗口 | ||
CS_DBLCLKS | 当用户光标在窗口内双击时,允许发送双击消息给窗口过程 | ||
CS_OWNDC | 给予每一个窗口实例分配一个唯一的DC(注意,尽管这样很方便,但它必须慎重使用,因为每一个DC大约要占800个字节的内存) | ||
CS_CLASSDC | 该窗口类的所有窗口实例都共享一个窗口类DC | ||
CS_PARENTDC | 1.将子窗口的裁剪区域设置到父窗口的DC中去,这样子窗口便可以在父窗口上绘制自身。(注意:这是子窗口从系统缓存中获取DC,而不是使用父窗口的DC。) 2.指定该分格可以提高系统性能 | ||
CS_NOCLOSE | 禁止系统菜单的关闭选项 | ||
CS_SAVEBITS | 1.以位图形式保存被该窗口遮挡的屏幕部分,当该窗口移动以后,系统便可以用该保存的位图恢复屏幕移动的相应部分,从而系统不用向被该窗口遮挡的窗口发送WM_PAINT消息。 2.该特性对于菜单类型的窗口比较合适,因为它通常是简短的显示一下之后便消失。 3.设置该特性将增加显示该窗口的时间,因为它通常要先分配保存位图的内存。 | ||
CS_BYTEALIGNCLIENT | 在字节边界上(x方向上)定位窗口的用户区域的位置 | ||
CS_BYTEALIGNWINDOW | 在字符边界上(x方向上)定位窗口的位置 | ||
CS_GLOBALCLASS | 1.当调用CreateWindow或CreateWindowEx函数来创建窗口时允许它的hInstance参数和注册窗口类时传递给RegisterClass的hInstace参数不同. 2.如果不指定该风格,则这两个hInstace必须相同 |