WNDCLASS结构包含由RegisterClass函数注册的窗口类属性。
typedef struct _WNDCLASS { // wc
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS;
会员
样式
指定类样式。可以使用按位OR(|)运算符组合样式。该成员可以是以下值的任意组合:
值 | 行动 |
CS_BYTEALIGNCLIENT | 将窗口的客户区域对准字节边界(x方向),以提高绘图操作期间的性能。该风格影响窗口的宽度及其在显示屏上的水平位置。 |
CS_BYTEALIGNWINDOW | 将窗口对齐在字节边界(x方向)上,以增强涉及移动或调整窗口大小的操作过程中的性能。该风格影响窗口的宽度及其在显示屏上的水平位置。 |
CS_CLASSDC | 分配一个设备上下文以由该类中的所有窗口共享。因为窗口类是特定于进程的,所以多线程应用程序的多个线程可能会创建同一个类的窗口。线程也可能尝试同时使用设备上下文。当这种情况发生时,操作系统只允许其中一个线程成功完成其绘图操作。 |
CS_DBLCLKS | 当用户在属于该类的窗口中的光标位于用户双击鼠标时,双击消息到窗口过程。 |
CS_GLOBALCLASS | 允许应用程序创建类的窗口,而不管传递给CreateWindow或CreateWindowEx函数的【的hInstance】参数的值。如果不指定此样式,传递给CreateWindow(或CreateWindowEx)函数的【的hInstance】参数必须与传递给RegisterClass函数的【的hInstance】参数相同。 |
您可以通过在动态链接库(DLL)中创建窗口类并在注册表中的以下键下列出DLL的名称来创建全局类: | |
HKEY_LOCAL_MACHINE\软件 \微软\Windows NT\ CurrentVersion\视窗\APPINIT_DLLS | |
每当进程开始时,操作系统在调用该进程中的主要函数之前,在新启动的进程的上下文中加载指定的DLL。DLL必须在初始化过程中注册该类,并且必须指定CS_GLOBALCLASS样式。 | |
CS_HREDRAW | 如果移动或尺寸调整改变了客户区域的宽度,则重绘整个窗口。 |
CS_NOCLOSE | 禁用系统菜单上的关闭命令。 |
CS_OWNDC | 为类中的每个窗口分配唯一的设备上下文。 |
CS_PARENTDC | 将子窗口的剪切区域设置为父窗口的剪切区域,以便孩子可以绘制父窗口。具有CS_PARENTDC样式位的窗口从系统的设备上下文缓存中接收常规设备上下文。它不给孩子父设备上下文或设备上下文设置。指定CS_PARENTDC增强了应用程序的性能。 |
CS_SAVEBITS | 作为位图保存屏幕图像的一部分被窗口遮蔽。当窗口被删除时,Windows使用保存的位图重新创建屏幕图像。Windows在其原始位置显示位图,如果位图所使用的内存未被丢弃,并且其他屏幕操作未使存储的图像无效,则Windows不会向窗口遮蔽的窗口发送WM_PAINT消息。此风格对于在其他屏幕活动发生之前短暂显示,然后删除的小窗口(例如,菜单或对话框)非常有用。这种风格增加了显示窗口所需的时间,因为操作系统必须首先分配内存来存储位图。 |
CS_VREDRAW | 如果移动或尺寸调整改变了客户区域的高度,则重绘整个窗口。 |
lpfnWndProc
指向窗口程序。有关详细信息,请参阅WindowProc.
cbClsExtra
指定在窗口类结构之后分配的额外字节数。操作系统将字节初始化为零。
cbWndExtra
指定窗口实例之后要分配的额外字节数。操作系统将字节初始化为零。如果应用程序使用WNDCLASS结构来注册通过资源文件中的CLASS指令创建的对话框,则必须将此成员设置为DLGWINDOWEXTRA。
的hInstance
标识此类的窗口过程所在的实例。
惠康
标识类图标。该成员必须是图标资源的句柄。如果该成员为NULL,则只要用户最小化应用程序的窗口,应用程序就必须绘制图标。
HCURSORpt
标识类游标。该成员必须是游标资源的句柄。如果此成员为NULL,则只要鼠标移动到应用程序的窗口中,应用程序就必须显式设置游标形状。
看一看hbrBackgroundlb
识别课堂背景画笔。该成员可以是用于画背景的物理画笔的句柄,也可以是一个颜色值。颜色值必须是以下标准系统颜色之一(值1必须添加到所选颜色)。如果给出了颜色值,则必须将其转换为以下HBRUSH类型之一:
COLOR_ACTIVEBORDER
COLOR_ACTIVECAPTION
COLOR_APPWORKSPACE
COLOR_BACKGROUND
COLOR_BTNFACE
COLOR_BTNSHADOW
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
当类被释放时,操作系统会自动删除类背景画笔。应用程序不应该删除这些画笔,因为一个类可能被应用程序的多个实例使用。
当此成员为NULL时,应用程序必须在其请求在其客户端区域中绘制时绘制自己的后台。要确定是否必须绘制背景,应用程序可以处理WM_ERASEBKGND消息或测试由BeginPaint函数填充的PAINTSTRUCT结构的PAINTSTRUCT成员。
lpszMenuName
指向一个空值终止的字符串,用于指定类菜单的资源名称,名称显示在资源文件中。如果使用整数来标识菜单,请使用MAKEINTRESOURCE宏。如果此成员为NULL,属于此类的Windows没有默认菜单。
lpszClassName
指向一个空值终止的字符串或是一个原子。如果这个参数是一个原子,它必须是由先前调用GlobalAddAtom函数创建的全局原子。原子,16位值必须在lpszClassName的低位字中;高阶字必须为零。
如果lpszClassName是字符串,则它指定窗口类名称。
也可以看看
BeginPaint, CreateWindow, CreateWindowEx, GetDC, GlobalAddAtom, MAKEINTRESOURCE, PAINTSTRUCT, RegisterClass, WNDCLASSEX, WindowProc, WM_PAINT