typedef struct{
UINT cbSize;
UINT style;
WNDPROC IpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
}WNDCLASSEX,*PWNDCLASSEX;
Members
cbSize: WNDCLASSEX的大小,可以用sizeof(WNDCLASSEX)来获得准确的值.
style: 从这个窗口类派生的窗口具有的风格.可用“or”把几种风格或到一起。(一组标志位的组合.定义比如窗口位置,设备上下文(DC)分配,双击处理等特征)
a : CS_NOCLOSE 如果指定了CS_NOCLOSE标志,则窗口上得关闭按钮和系统菜单上的关闭命令失效.
b: CS_HREDRAW,CS_VREDRAW
CS_HREDRAW标志表示当窗口的水平尺寸(宽度)改变的时候,重画整个窗口,CS_VREDRAW则是在窗口垂直尺寸(高度)改变时重画整个窗口。按钮和滚动条都有这两种风格.
d:CS_DBLCLKS 标志使窗口可以检测到双击事件,窗口响应双击的细节如下:
(1)如果窗口没有CS_DBCLKS标志,系统向窗口依次发送如下信息:
VM_LBUTTONDOWN
VM_LBUTTONUP
VM_LBUTTONDOWN
VM_LBUTTONUP
其实相当于两个单击。
(2)如果窗口有CS_DBLCLKS标志,则系统向窗口依次发送如下消息:
VM_LBUTTONDOWN
VM_LBUTTONUP
VM_LBUTTONDBLCLK
VM_LBUTTONUP
一般的情况下,如果没有指定CS_DBLCLKS,在窗口的消息循环里将不会得到VM_LBUTTONDBLCLK消息.
lpfnWndProc成员保存了该窗口类的窗口过程地址.该窗口类的所有窗口都使用该过程地址,对于从该类创建的窗口,系统将所有相关的消息交给此窗口过程来处理,窗口过程实现窗口的功能,程序可以使用SetClassLong函数来改变窗口类的窗口过程,这个操作叫"子类化"(Subclassing)。当程序改变了该过程的地址时,在改变前已经创建的窗口还是原来的地址,而以后创建的窗口才使用新的过程地址。
cbClsExtra,cbWndExtra:
cbClsExtra成员指明为每个窗口类分配的额外数据量,cbWndExtra成员则是指明为每个窗口实例分配的额外数据量,如果程序不需要分配额外的数据,这两个成员的值都应该设置为0,以免产生不确定的数,而使系统进行错误分配,如果是负数,则该窗口类将不会被注册.
hInstance 成员标识类所在的模块,此成员可以为进程的hlnstance,或DLL的hlnstance ,但不可以为NULL.
lcon 成员标识此窗口类的图标,程序一般使用Loadicon,从系统标准图标库(如IDI_APPLICATION)或用户指定的图标资源中来获取一个图标句柄.如果hlcon的值为NULL,当系统给程序发送VM_ICONERASEBKGND消息的时候,程序给窗口画上程序的图标.