CS_HREDRAW | CS_VREDRAW是什么?它有什么作用?

6
structure.style = CS_HREDRAW | CS_VREDRAW;

这是我发现的注册窗口类并设置调整大小设置的代码行,但它是如何工作的?结构体的style值将是什么?
中间的管道符号|是按位OR,因此它会将style设置为来自CS_HREDRAW | CS_VREDRAW的位组合,那么对于Windows来说意味着什么,它将如何知道是否同时设置了两个、一个或都没有?
也许我想太多了...

@Cheersandhth.-Alf 我已经尝试了,但仍然不理解。位运算组合的结果对 Windows 有什么意义? - user3704920
3
当设置了 CS_HREDRAW 标志位时,水平大小的更改会导致整个窗口重新绘制。否则,水平大小的更改仅会重新绘制新暴露出来的区域。类似地,对于 CS_VREDRAW,其中 V 代表“垂直”,垂直大小的更改也遵循同样的规则。 - Cheers and hth. - Alf
1个回答

10

这些标志可以进行按位或操作的原因是它们被有意地编写为不互相抵消。

如果您查看这些标志的值,您会发现:

CS_HREDRAW = 0x0001 = 0000 0000 0000 0001
CS_VREDRAW = 0x0002 = 0000 0000 0000 0010

应用这些标志的OR操作的结果是:
COMBINED = 0x0003 = 0000 0000 0000 0011

这被称为位域(Bit Field)

函数知道每个标志位对应的位,因此查看哪些位被设置将告诉它如何行动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接