曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5100|回复: 1
打印 上一主题 下一主题

对窗口样式 WS_CLIPSIBLINGS 的解析

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2012-1-29 16:22:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于窗口样式 WS_CLIPSIBLINGS 在 MSDN 里是这么解释的:
Clips child windows relative to each other; that is, when a particular child window receives a WM_PAINT message, the WS_CLIPSIBLINGS style clips all other overlapping child windows out of the region of the child window to be updated. If WS_CLIPSIBLINGS is not specified and child windows overlap, it is possible, when drawing within the client area of a child window, to draw within the client area of a neighboring child window.
翻译过来就是:
对相关的子窗口进行裁剪是指,当一个特定的子窗口收到一个 WM_PAINT 消息时,如果该子窗口具有 WS_CLIPSIBLINGS  样式属性,那么它会裁剪掉所有其它与之发生重叠的子窗口的那些要被更新的部分。如果没有指定 WS_CLIPSIBLINGS  样式属性,那么可能的情况是,当在一个子窗口的客户区绘图时,那么也会绘到相邻子窗口的客户区里。

下面假设有两个具有可拖拽边框子窗口(A, B)同落在一个父窗口中,如下图所示:

其中 A 窗口具有 WS_CLIPSIBLINGS  样式属性,B 窗口可有可无。

接着,拖动 A 窗口,使之和 B 窗口重叠,如下图所示:


由于 A 窗口是一个树形控件,点击节点可以展开,现在尝试展开:

效果非常好,A 窗口的展开并没有影响到 B 窗口中的内容,这样看上去,似乎 A 窗口中被重叠的那部分已经被裁剪掉了。

但是,如果在程序中去掉 A 窗口的 WS_CLIPSIBLINGS 样式属性,再做上面同样的步骤,会看到:

再看上图,效果明显差了。因为在我们展开 A 窗口的树时,实际上是在 A 窗口的客户区绘图,而 A 窗口此时又没有设置 WS_CLIPSIBLINGS 属性,那么它就会将“图”绘到相邻的子窗口的客户区里,这里的相邻子窗口就是 B 。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-29 12:55 , Processed in 0.079248 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表