窗口注册类结构和消息结构详解

  本文介绍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  谢谢。

 

  完毕。^_^

 

posted @ 2011-04-12 22:55  Healtheon  阅读(1511)  评论(0编辑  收藏  举报