WNDCLASS(WNDCLASSEX)结构介绍
WNDCLASS 结构包含了窗口类的属性信息。
这个结构在使用RegisterClassEx函数注册窗口类时被WNDCLASSEX结构所取代。如果不需为窗口类设置小图标时,仍然可以使用WNDCLASS和RegisterClass。
语法:
typedef struct {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *pWNDCLASS;
Windows系统自己定义了一个结构类型,WNDCLASS,一个指针类型*pWNDCLASS//注意p是小写字符;
程序中要需要这个类型的变量就可以声明:WNDCLASS aa; pWNDCLASS bb;
此时aa就是WNDCLASS类型的变量,bb就是指向WNDCLASS类型的指针变量;
结构成员:
style 描述类风格。该成员可以是“Class Styles”的任意组合。
CS_VREDRAW 当窗口水平方向的宽度变化时重绘整个窗口
CS_HREDRAW 当窗口水平方向的宽度变化时重绘整个窗口
CS_OWNDC 独占设备描述表
CS_SAVEBITS 保存窗口覆盖区
CS_DBCLKS 允许两次连续按动
CS_BYTEALLGNCLIENT 鼠标用户区域按字节对齐显示
CS_BYTEALLGNWINDOW 鼠标用户窗口按字节对齐显示
CS_NOCLOSE 系统菜单中没有CLOSE菜单项
lpfnWndProc
指向窗口过程的指针。必须使用CallWindowProc函数调用窗口过程。
cbClsExtra
表示窗口类结构之后分配的额外的字节数。系统将该值初始化为0.
cbWndExtra
表示窗口实例之后分配的额外的字节数。系统将该值初始化为0.如果使用资源文件里的CLASS指令创建对话框,并用WNDCLASS注册该对话框时,cbWndExtra必须设置成DLGWNDOWEXTRA。
hInstance
包含该类实例的句柄,该实例包含了窗口过程。
hIcon
类图标的句柄。必须为一个图标资源的句柄。如果hIcon为NULL,系统将提供默认图标。
hCursor
鼠标指针的句柄。必须为一个指针资源的句柄。如果hCursor为NULL,应用程序必须在指针移入应用程序窗口时显式设置指针类型。
hbrBackground
背景画刷的句柄。该成员或者是用于绘制背景的物理画刷的句柄,或者是一个颜色值。颜色值必须为如下标准系统颜色值(值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
当调用UnregisterClass时,系统自动删除背景画刷。应用程序不应删除这些画刷。
当hbrBackground为NULL时,应用程序必须在绘制客户区域时绘制它自己的背景。为了确定背景是否一定要绘制,应用程序或者可以处理 WM_ERASEBKGND消息,或者测试PAINTSTRUCT的fErase成员。PAINTSTRUCT是由BeginPaint函数填充的。
lpszMenuName
指向\0结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样。若使用一个整数标识菜单,可以使用MAKEINTRESOURCE宏。如果lpszMenuName为NULL,那么该窗口类的窗口将没有默认菜单。
lpszClassName
指 向\0结束的字符串,或者是一个原型(atom)。若该参数是一个原型,它必须是一个有先前调用RegisterClass或者 RegisterClassEx函数产生的类原型。类原型必须作为lpszClassName的低字,高字必须为0.若lpszClassName是一个 字符串,它描述了窗口类名。这个类名可以是任何预定义的控件类名或者是程序员由RegisterClass或者RegisterClassEx注册的名字。
WNDCLASSEX 属于另外一个窗口结构体,他比WNDCLASS多了一个成员:UINT cbSize(WNDCLASSEX 结构体的大小) 平时使用WNDCLASSEX比较多.
WNDCLASSEX结构体原型如下:
结构信息
typedef struct tagWNDCLASSEXA {
UINT cbSize; //WNDCLASSEXA 结构体的大小(sizeof(WNDCLASSEX))
UINT style; //窗口类的样式
WNDPROC lpfnWndProc; //窗口处理函数的指针
int cbClsExtra; //为窗口类的额外信息做记录,初始化为0。
int cbWndExtra; //记录窗口实例的额外信息,系统初始为0
HINSTANCE hInstance; //本模块的实例句柄
HICON hIcon; //窗口类的图标,为图标资源句柄
HCURSOR hCursor; //窗口类的鼠标样式,为鼠标样式资源的句柄
HBRUSH hbrBackground; //窗口类的背景刷,为背景刷句柄
LPCSTR lpszMenuName; //指向菜单的指针
LPCSTR lpszClassName; //指向类名称的指针
HICON hIconSm; //小图标的句柄,在任务栏显示的图标
} WNDCLASSEXA, *PWNDCLASSEXA, NEAR *NPWNDCLASSEXA, FAR *LPWNDCLASSEXA;
结构体选项详解:
1. cbSize: WNDCLASSEX 的大小。在调用GetClassInfoEx前必须要先设置它值。我们可以用sizeof(WNDCLASSEX)来获得准确的值。
2:style:表示窗口的类型,取值是系统定义好的一组宏可以用按位或"|"组合使用
例如:aa.style|=CS_VREDRAW|CS_NOCLOSE;注意红色的“或”符号字符要大写;
#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 小图标的句柄,在任务栏显示的图标,可以和上面的那个一样。
WNDCLASS(WNDCLASSEX)结构介绍相关推荐
- pytorch学习笔记(九):PyTorch结构介绍
PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...
- linux服务器都有注册表吗,NT服务器的注册表结构介绍
NT服务器的注册表结构介绍 HKEY_CLASSES_ROOT:它包括与OLE和文件关联有关的信息.设置这一项的目的是提供和目前的Windows 3.x相兼容. HKEY_CURRENT_USER:它 ...
- 六十一、分析Springboot中的项目结构介绍
@Author:Runsen 来源:尚硅谷 下面建议读者学习尚硅谷的B站的SpringBoot视频,我是学雷丰阳视频入门的. 具体链接如下:B站尚硅谷SpringBoot教程 文章目录 spring项 ...
- 【笔记】spring的注解回顾,springboot-restful项目结构介绍 springboot-freemarker ⼯程配置详解
注解 学Spring boot有一阵子了,总结一下它的注解. @Controller :修饰class,⽤来创建处理http请求的对象 @RestController :Spring4之后加⼊的注解, ...
- Java-GUI编程实战之管理系统 Day3【学生管理系统GUI设计、学生管理系统增删改查、项目MVC结构介绍、Java技能图谱】
视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...
- (第五篇)Linux操作系统基本结构介绍
Linux操作系统基本结构介绍 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用 ...
- linux内核结构介绍
参考:linux内核结构介绍.什么是shell 作者:丶PURSUING 发布时间: 2021-02-15 14:15:24 网址:https://blog.csdn.net/weixin_44742 ...
- .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI
作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...
- ROS系统玩转自主移动机器人(3)-- 开源机器人结构介绍
ROS系统玩转自主移动机器人(3)-- 开源机器人结构介绍 本机器人机械结构设计相关的所有设计文件下载地址为:传送门 其中包含:三维造型设计文件(所有零件+装配效果)(tips:基于Solidwor ...
最新文章
- 一个支付案例,学会策略模式!
- 利用Windows Server Backup备份数据进行域控裸机还原
- Redis数据持久化
- PyQt5 图形界面 - Qt Designer独立安装包,仅需30M!python图像化界面绘制工具
- JAVA——自定义排序(实现Comparable接口)
- 记录Docker in Docker 安装(CentOS7)
- 操作系统常考知识点总结(1)
- LeetCode 1736. 替换隐藏数字得到的最晚时间
- 5G精华问答 | 除了速度,5G还能带来什么?
- 为什么Spring需要三级缓存解决循环依赖,而不是二级缓存?
- 码云webhook php,PHP实现码云Gitee的WebHook密钥验证算法
- .NET基础 (04)基础类型和语法
- Android 图标异常,APK格式文件图标显示异常
- 2021-08-08 解决“These dependencies were not found“的报错
- 乳腺癌病理图像处理综述
- android 点击返回键home,android Home键和返回键
- ios支付宝支付--看我就够了
- mysql创建数据库并创建表
- CNN数据集——自己建立数据集要点
- 欧拉角速度与角速度的关系推导——欧拉运动方程
热门文章
- 美团外卖广告智能算力的探索与实践
- 【git】基本命令和本地操作
- 戴尔灵越7000笔记本开机吱吱响,解决办法
- 2021年广东专插本计算机专业学校,2021年广东省专插本学校名单和专业,广东专插本有哪些学校和那些专业...
- 纯CSS实现文字通知无缝衔接无限循环滚动
- Qt开发自学13_黑白棋
- 闲的发慌系列01-家庭版NAS
- JSON实例类 key可带中文
- hbase常见问题及解决方案总结(一)
- airplay 安卓接收_在没有Apple TV的情况下将AirPlay添加到接收器-Raspbmc和Raspberry Pi