MFC WNDCLASSEX结构

来源:互联网 发布:京东商城app源码 编辑:程序博客网 时间:2024/06/06 14:08

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消息的时候,程序给窗口画上程序的图标.

   

原创粉丝点击