WNDCLASSEX属于一个窗口结构体,他比WNDCLASS多了两个成员:UINT cbSize(WNDCLASSEX 结构体的大小) 和HICON hIconSm(窗口类关联的小图标),平时使用WNDCLASSEX比较多.
WNDCLASSEX结构体原型如下:
WNDCLASSEXA 结构体原型
typedef struct tagWNDCLASSEXA {
UINT cbSize; //WNDCLASSEXA 结构体的大小(sizeof(WNDCLASSEX))
/* Win 3.x */
UINT style; //窗口类的样式
WNDPROC lpfnWndProc; //窗口处理函数的指针
int cbClsExtra; //为窗口类的额外信息做记录,初始化为0。
int cbWndExtra; //记录窗口实例的额外信息,系统初始为0
HINSTANCE hInstance; //本模块的实例句柄
HICON hIcon; //窗口类的图标,为图标资源句柄
HCURSOR hCursor; //窗口类的鼠标样式,为鼠标样式资源的句柄
HBRUSH hbrBackground; //窗口类的背景刷,为背景刷句柄
LPCSTR lpszMenuName; //指向菜单的指针
LPCSTR lpszClassName; //指向类名称的指针
/* Win 4.0 */
HICON hIconSm; //小图标的句柄,在任务栏显示的图标
} WNDCLASSEXA, *PWNDCLASSEXA, NEAR *NPWNDCLASSEXA, FAR *LPWNDCLASSEXA;
WNDCLASSEXW 宽字节结构体原型
typedef struct tagWNDCLASSEXW {
UINT cbSize; //WNDCLASSEXA 结构体的大小(sizeof(WNDCLASSEX))
/* Win 3.x */
UINT style; //窗口类的样式
WNDPROC lpfnWndProc; //窗口处理函数的指针
int cbClsExtra; //为窗口类的额外信息做记录,初始化为0。
int cbWndExtra; //记录窗口实例的额外信息,系统初始为0
HINSTANCE hInstance; //本模块的实例句柄
HICON hIcon; //窗口类的图标,为图标资源句柄
HCURSOR hCursor; //窗口类的鼠标样式,为鼠标样式资源的句柄
HBRUSH hbrBackground; //窗口类的背景刷,为背景刷句柄
LPCWSTR lpszMenuName; //指向菜单的指针
LPCWSTR lpszClassName; //指向类名称的指针
/* Win 4.0 */
HICON hIconSm; //小图标的句柄,在任务栏显示的图标
} WNDCLASSEXW, *PWNDCLASSEXW, NEAR *NPWNDCLASSEXW, FAR *LPWNDCLASSEXW;
结构体选项详解:
1. cbSize WNDCLASSEX 的大小。在调用GetClassInfoEx前必须要先设置它值。我们可以用sizeof(WNDCLASSEX)来获得准确的值。
2:style,表示窗口的类型,取值是系统定义好的一组宏
#define CS_VREDRAW 0x0001 //若移动或改变窗口高度,则刷新整个窗口。
#define CS_HREDRAW 0x0002 //若移动或改变窗口宽度,则刷新整个窗口。
#define CS_DBLCLKS 0x0008 //当用户双击鼠标时向窗口程序发送一个双击的信息,同时光标位于该类的窗口里
#define CS_OWNDC 0x0020 //为同一个窗口类中的每个窗口创建一个唯一的设备上下文
#define CS_CLASSDC 0x0040 //分配一个设备环境并被类中的所有窗体共享。它是可以适用于一个应用程序的若干线程创建的一个相同类的窗体。当多个线程试图同时使用相同的设备环境时,系统只允许 一个线程成功地进行绘图操作
#define CS_PARENTDC 0x0080 //设置子窗口中剪下的矩形区域到父窗口中,以使子窗口可以在父窗口上绘图。指定该风格可以提高应用程序的性能
#define CS_NOCLOSE 0x0200 //窗口中的“关闭”按钮不可见
#define CS_SAVEBITS 0x0800 //把被窗口遮掩的屏幕图像作为位图保存起来。当该窗口被移动时,Windows操作系统使用被保存的位图来重建屏幕图像
#define CS_BYTEALIGNCLIENT 0x1000 //窗口的客户区域以“字符边界”对齐,当系统调整窗口的水平位置时,客户区域的左边坐标是8的整数倍
#define CS_BYTEALIGNWINDOW 0x2000 //窗口以“字符边界”对齐,当系统调整窗口的水平位置时,客户区域的左边坐标是8的整数倍
#define CS_GLOBALCLASS 0x4000 //指定此窗体类是一个应用程序全局类。应用程序全局类是由一个在进程中对所有模块有效的exe或dll注册的窗体类
#define CS_IME 0x00010000 //没找到解释
#define CS_DROPSHADOW 0x00020000 //窗口产生阴影效果
3. lpfnWndProc 指向窗口处理函数(回调函数)。处理窗口事件,像单击鼠标会怎样,右击鼠标会怎样,都是由此函数控制的。
4. cbClsExtra 为窗口类的额外信息做记录,初始化为0。
5. cbWndExtra 记录窗口实例的额外信息,系统初始为0.如果程序使用WNDCLASSEX注册一个从资源文件里创建的对话框,则此参数必须设置为DLGWINDOWEXTRA
6. hInstance:本模块的事例句柄。
7. hIcon 窗口类的图标,为资源句柄,如果设置为NULL,系统将为窗口提供一个默认的图标。
8. hCursor 窗口类的鼠标样式,为鼠标样式资源的句柄,如果设置为NULL,系统提供一个默认的鼠标样式。
9. hbrBackground 窗口类的背景刷,为背景刷句柄,也可以为系统颜色值,如果颜色值已给出,则必须转化为以下的HBRUSH的值
#define COLOR_SCROLLBAR 0
#define COLOR_BACKGROUND 1
#define COLOR_ACTIVECAPTION 2
#define COLOR_INACTIVECAPTION 3
#define COLOR_MENU 4
#define COLOR_WINDOW 5
#define COLOR_WINDOWFRAME 6
#define COLOR_MENUTEXT 7
#define COLOR_WINDOWTEXT 8
#define COLOR_CAPTIONTEXT 9
#define COLOR_ACTIVEBORDER 10
#define COLOR_INACTIVEBORDER 11
#define COLOR_APPWORKSPACE 12
#define COLOR_HIGHLIGHT 13
#define COLOR_HIGHLIGHTTEXT 14
#define COLOR_BTNFACE 15
#define COLOR_BTNSHADOW 16
#define COLOR_GRAYTEXT 17
#define COLOR_BTNTEXT 18
#define COLOR_INACTIVECAPTIONTEXT 19
#define COLOR_BTNHIGHLIGHT 20
#if(WINVER >= 0x0400)
#define COLOR_3DDKSHADOW 21
#define COLOR_3DLIGHT 22
#define COLOR_INFOTEXT 23
#define COLOR_INFOBK 24
#endif /* WINVER >= 0x0400 */
#if(WINVER >= 0x0500)
#define COLOR_HOTLIGHT 26
#define COLOR_GRADIENTACTIVECAPTION 27
#define COLOR_GRADIENTINACTIVECAPTION 28
#if(WINVER >= 0x0501)
#define COLOR_MENUHILIGHT 29
#define COLOR_MENUBAR 30
#endif /* WINVER >= 0x0501 */
#endif /* WINVER >= 0x0500 */
#if(WINVER >= 0x0400)
#define COLOR_DESKTOP COLOR_BACKGROUND
#define COLOR_3DFACE COLOR_BTNFACE
#define COLOR_3DSHADOW COLOR_BTNSHADOW
#define COLOR_3DHIGHLIGHT COLOR_BTNHIGHLIGHT
#define COLOR_3DHILIGHT COLOR_BTNHIGHLIGHT
#define COLOR_BTNHILIGHT COLOR_BTNHIGHLIGHT
#endif /* WINVER >= 0x0400 */
10. lpszMenuName 指向一个以NULL结尾的字符串,同目录资源的名字一样。如果使用整型id表示菜单,可以用MAKEINTRESOURCE定义一个宏。如果它的值为NULL,那么该类创建的窗口将都没有默认的菜单。
11. lpszClassName 指向窗口类的指针,LPSTR类型。
12. hIconSm 小图标的句柄,在任务栏显示的图标,可以和上面的那个一样。