Windows零基础入门:2.17 窗口类结构体之位或组合和位与去除窗口类风格
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
手机收藏 | 分享给好友
在《Windows零基础入门:2.14 (1)窗口类使用完整代码演示和详细注释》中,有完整的代码,窗口类部分有了详细的注释。这里不重复贴代码。
先给一个位操作符表,大家参考:
上节课讲到了窗口类风格的各种取值的所有可能,以及各个值的宏定义,也介绍了怎么给窗口类结构体变量的类风格style成员赋值,那么我们现在就先使用代码来演示如何使用。
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
第一句就是定义一个窗口类结构体变量,然后第二句给窗口类风格成员赋值。这里使用了位或操作符将两个窗口类风格组合起来了。因为CS_HREDRAW 和 CS_VREDRAW是两个宏,实际上就是一个整型常量,在上一节课里已经介绍了。那么这里我们其实可以直接使用数字来赋值以及组合,如下:
WNDCLASS wndclass;
wndclass.style = 0x0002 | 0x0001;// 十六进制表示
或
WNDCLASS wndclass;
wndclass.style = 2 | 1;// 十进制表示
这样和上面一样可以设置这个窗口类风格。只是你也看到了,如果用数字的话,你就很难看到这些数字代表的是什么意义了。这样就不方便了,所以说,上面的宏的使用,就清晰了,通过英文字符可以快速的判断它代表的意义。如果你还要使用其他风格,可以在后面接着位或进来就可以了,如:
WNDCLASS wndclass;
wndclass.style = 2 | 1 | CS_GLOBALCLASS;// 十进制表示与宏的混合使用
之前设置好的风格,或者一些复合型的,有些宏就是几种风格的混合,这个很常见。如果你要去掉一个混合中的风格其中一种,或者是之前设置了几种,但是后来又要取消,那么你可以使用位与&来处理。而要对位取反,注意一定不要写成了!哦,!是逻辑取反,位取反是~操作符。我们要去掉一种风格,就是要将这个风格代表的位设置为0即可。我们来以水平重绘窗口类风格去除为例来介绍。
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.style = wndclass.style & (~CS_HREDRAW);
wndclass.style = wndclass.style & (~CS_HREDRAW);
这句代码有人喜欢写成:
wndclass.style &= (~CS_HREDRAW);
1111111111111101 第一个的位反~CS_HREDRAW结果,
0000000000000011 wndclass.style的开始赋的值
位与&
----------------------
0000000000000001 结果为1,也就是CS_VREDRAW
wndclass.style = wndclass.style & (~CS_HREDRAW);
wndclass.style = CS_VREDRAW;
当前文章为会员文章,请前往[用户中心]开通会员后继续阅读。
Win32课程菜单
-
- 第1节 指定入口点函数
- 第2节 VS创建Win32项目
- 第3节 exe程序文件
- 第4节 WinMain函数
- 第5节 实例句柄和命令行
- 第6节 第一个程序
- 第7节 Win32窗口机制和消息机制
- 第7节+ 消息机制补充说明(消息队列)
- 第8节 什么是窗口类
- 第9节 窗口类、进程和窗口过程
- 第10节 三种窗口类
- 第11节 修改窗口类
- 第12节 修改系统窗口类(子类化)
- 第13节 修改窗口类的机制和论证
- 第14节 窗口类使用
- 第15节 窗口类使用之窗口类结构体
- 第16节 窗口类结构体之窗口类风格
- 第17节 窗口类结构体之去除窗口类风格
- 第18节 窗口类结构体之水平重绘和垂直重绘
- 第19节 窗口类结构体之CS_DBLCLKS
- 第20节 窗口类结构体之CS_OWNDC
- 第21节 窗口类结构体之CS_CLASSDC
- 第22节 窗口类结构体之CS_PARENTDC
- 第23节 窗口类结构体之CS_NOCLOSE
- 第24节 窗口类结构体之CS_SAVEBITS
- 第25节 窗口类结构体之CS_BYTEALIGNCLIENT
- 第26节 窗口阴影效果CS_DROPSHADOW解密