WNDCLASS结构体初探

WNDCLASS结构体含有通过RegisterClass函数注册的窗口类的属性.

这个结构已经被使用RegisterClassEx注册的 WNDCLASSEX 结构体取代。你仍然可以使用WNDCLASSRegisterClass,如果您不需要小图标关联窗口类。

typedef struct _WNDCLASS { 
    UINT       style; 
    WNDPROC    lpfnWndProc; 
    int        cbClsExtra; 
    int        cbWndExtra; 
    HINSTANCE  hInstance; 
    HICON      hIcon; 
    HCURSOR    hCursor; 
    HBRUSH     hbrBackground; 
    LPCTSTR    lpszMenuName; 
    LPCTSTR    lpszClassName; 
} WNDCLASS, *PWNDCLASS; 
 

成员:

style
指定窗口的样式,可以使class styles的任意组合.
CS_HREDRAW水平重绘
CS_VERDRAW垂直重绘
CS_NOCLOSE禁用系统菜单close命令
CS_DBLCLKS当用户在窗口中双击鼠标时,向窗口发送鼠标双击消息
lpfnWndProc
指向窗口过程函数的指针. 可以使用 CallWindowProc函数调用窗口过程.
在函数调用过程中,会使用栈,_stdcall与_cdecl是两种不同的函数调用约定,定义了函数入栈的顺序.
cbClsExtra
指定紧跟在类之后的附加内存空间的字节数. 系统初始化为0.
cbWndExtra
指定紧随在窗口实例之后分配的字节数,系统将其初始化为零。如果应用程序正在用WNDCLASS结构注册一个在RC资源描述文件中用CLASS指令创建的对话框时,它必须设置这个字段为 DLGWINDOWEXTRA。
hInstance
标识了该窗口类的窗口过程所在的模块实例的句柄,不能为NULL。
hIcon:
  标识了该窗口类的图标。hIcon字段必须是一个图标的句柄;若hIcon字段为NULL,那么系统将提供一个默认的图标。
hCursor:
   标识该窗口类的光标,hCursor必须是一个光标资源的句柄。若hCursor字段为NULL,则无论何时鼠标移到应用程序窗口时,应用程序必须显式设置光标形状。
 hbrBackground:
   标识了该窗口类的背景画笔。hbrBackground字段必须是用于绘制背景的物理刷子的句柄,或者是一个颜色的值。如果给出一个颜色的值,它必须是下面列出的标准系统颜色之一(系统将对所选颜色加1)。如果给出了颜色值,它必须是转换成下列的HBRUSH类型之一的颜色:
 
  COLOR_ACTIVEBORDER
  COLOR_ACTIVECAPTION
  COLOR_APPWORKSPACE
  COLOR_BACKGROUND
  COLOR_BTNFACE
  COLOR_BTHSHADOW
  COLOR_BTNTEXT
  COLOR_CAPTIONTEXT
  COLOR_GRAYTEXT
  COLOR_HIGHLIGHT
  COLOR_HIGHLIGHTTEXT
  COLOR_INACTIVEBORDER
  COLOR_INACTIVECAPTION
  COLOR_MENU
  COLOR_MENUTEXT
  COLOR_SCROLLBAR
  COLOR_WINDOW
  COLOR_WINDOWFRAME
  COLOR_WINDOWTEXT
   当hbrBackground字段为NULL时,每当需要绘制其用户区域时,应用程序必须自己来绘制其背景。应用程序可以通过处理WM_ERASEBKGND 消息或检查由 BeginPaint 函数填写的 PAINTSTRUCT 结构的fErase 字段来确定背景什么时候需要着色。
   lpszMenuName :指向NULL结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样。若使用一个整数标识菜单,可以使用MAKEINTRESOURCE宏。如果lpszMenuName为NULL,那么该窗口类的窗口将没有默认菜单。
   lpszClassName :指向NULL结束的字符串,或者是一个原型(atom)。若该参数是一个原型,它必须是一个有先前调用RegisterClass或者 RegisterClassEx函数产生的类原型。类原型必须作为lpszClassName的低字,高字必须为0.若lpszClassName是一个字符串,它描述了窗口类名。这个类名可以是由RegisterClass或RegisterClassEx注册的名字,或者是任何预定义的控件类名。
posted @ 2012-08-07 23:03  斗榖於菟  阅读(1103)  评论(0编辑  收藏  举报