窗口注册类结构和消息结构详解
本文介绍Windows API中的窗口注册类和消息结构的相关知识。
WNDCLASSEX窗口注册类:
结构体原型:
typedef struct WNDCLASSEX { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; } WNDCLASSEX, *PWNDCLASSEX;
参数详解:
cbSize:
WNDCLASSEX 的大小。我们可以用sizeof(WNDCLASSEX)来获得准确的值。
style:
从这个窗口类派生的窗口具有的风格。您可以用“or”操作符来把几个风格或到一起。
lpfnWndProc:
窗口处理函数的指针。
cbClsExtra:
指定紧跟在窗口类结构后的附加字节数。
cbWndExtra:
指定紧跟在窗口事例后的附加字节数。如果一个应用程序在资源中用CLASS伪指令注册一个对话框类时,则必须把这个成员设成DLGWINDOWEXTRA。
hInstance:
本模块的事例句柄。
hIcon:
图标的句柄。
hCursor:
光标的句柄。
hbrBackground:
背景画刷的句柄。
lpszMenuName:
指向菜单的指针。
lpszClassName:
指向类名称的指针。
hIconSm:
和窗口类关联的小图标。如果该值为NULL。则把hCursor中的图标转换成大小合适的小图标。
WNDCLASSEX 中最重要的成员莫过于lpfnWndProc了。前缀 lpfn 表示该成员是一个指向函数的长指针。在 Win32中由于内存模式是 FLAT 型,所以没有 near 或 far 的区别。每一个窗口类必须有一个窗口过程,当 Windows 把属于特定窗口的消息发送给该窗口时,该窗口的窗口类负责处理所有的消息,如键盘消息或鼠标消息。由于窗口过程差不多智能地处理了所有的窗口消息循环,所 以您只要在其中加入消息处理过程即可。
MSG消息结构如下:
typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG, *PMSG;
参数详解:
hwnd:
所要发送消息到窗口的句柄。
message:
指定的消息标识符。应用程序只能用低字节,系统用高字节。
wParam:
相关参数的附加信息。
lParam:
相关参数的附加信息。
time:
标识发送消息的时间。
pt:
当发送消息时标识鼠标的光标位置。
WM_CREATE消息响应函数和WM_INITDIALOG消息响应函数之区别:
在响应WM_CREATE消息响应函数的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口啦,这个消息响应完之后,对话框和子控件才开始创建。因此在此消息响应函数中无法对控件进行修改和初始化。
而WM_INITDIALOG消息响应函数是在程序运行时,当其对话框和子控件全部创建完毕,将要显示内容的时候发送的消息。因此可以在WM_INITDIALOG消息响应函数中添加对编辑框控件的初始化和修改。
最后,希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2011/04/12/2014220.html 谢谢。
完毕。^_^