WS_CLIP特性 文章
来源:互联网 发布:加油站经营数据分析 编辑:程序博客网 时间:2024/06/06 01:41
3.1 验证 WS_CLIPCHILDREN
简单到什么程度呢?只需要在对话框的属性打个勾而已。
图3?1 如何设置对话框Clip Children属性
我们先做做第一个程序,这个程序唯一有点难的地方就在于需要继承一下CStatic类,然后重载一下OnPaint函数。
void MYStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// 获得控件客户区矩形大小
CRect rect;
GetClientRect(rect);
// 绘制控件边框
dc.MoveTo(0,0);
dc.LineTo(rect.Width(),0);
dc.LineTo(rect.Width(),rect.Height());
dc.LineTo(0,rect.Height());
dc.LineTo(0,0);
// 绘制文本
dc.TextOut(rect.Width()/2 - 5,rect.Height()/2 - 5,"Hello");
// Do not call CStatic::OnPaint() for painting messages
}
当我们不设置对话框的Clip children属性的时候,效果如下图所示:
图 3?2 效果图
当设置了Clip children属性的时候,接下来是见证奇迹的时刻 。^_^
图 3?3 效果图
很明显父窗口没有管子窗口的背景色如何绘制。子窗口的背景只是当时桌面上现有的窗口内容。
3.2 验证WS_CLIPSIBLINGS
当第一个实验成功之后,我原以为WS_CLIPSIBLINGS也会相当地简单。结果我花费了大量的时间纠缠在这个问题上。首先遇到的第一个问题,当然是动态地改样式,这个并不是太复杂的问题。如何动态改样式,见下面的代码:
LONG style = GetWindowLong(m_pic.GetSafeHwnd(),GWL_STYLE);
style = style | WS_CLIPSIBLINGS ;
SetWindowLong(m_pic.GetSafeHwnd(),GWL_STYLE,style);
然后,我在对话框上添加了一个图片控件和一个自绘制的控件(和上例类似,为了效果明显,我对自绘的控件进行了填充)
按照我预先设想的效果,理想的情况应该如下:
图 3?4预想的效果图
发现结果很混乱,每回都得不到我想要的,具有随机性。甚至有的时候按照我的预想,有的时候则完全不管我的心情。哪怕我气的吹胡子瞪眼睛,也是枉然。
最常见的是这样一种情况,就是无论我设置不设置WS_CLIPSIBLINGS属性,当点击重绘图片控件的时候(m_pic.Invalidate()),效果都一如既往,先开始图片控件(pic)被自定义控件(custom)压盖,然后重绘之后,图片控件(pic)压盖自定义控件(custom)。
图 3?5一种错误图
经过一段时间的郁闷,我最终找到了问题之所在,是这样的一个结论:WS_CLIPSIBLINGS还和控件的叠加顺序有关。叠加顺序如果不对,你无法查看WS_CLIPSIBLINGS的效果。就上面的问题,我们可以在VC编辑器里查看到控件的叠加顺序。
Pic控件是在custom控件的下方。(Tab Order和Z Order顺序是一致的)。这样设置不设置WS_CLIPSIBLINGS都无法看出效果。
但是改变控件的压盖顺序,令pic控件压盖在custom控件之上(实际上是改变Tab order顺序)
这样就会出现预期的效果。当不设置WS_CLIPSIBLINGS,pic控件会压盖custom控件,而当设置了该属性,则pic控件不会压盖custom控件,重叠的区域由custom控件自己绘制。
图3?8 预期的效果
4.结论
好,到此为止,应该说点有结论的话了。
(1) WS_CLIPCHILDREN样式主要是用于父窗口,也就是说当在父窗口绘制的时候,父窗口上还有一个子窗口,那么设置了这个样式的话,子窗口区域父窗口就不负责绘制。
(2) 所有的overlapped和popup风格的窗口,都有WS_CLIPSIBLINGS属性。也就是说这类风格的窗口,你是去不掉WS_CLIPSIBLINGS属性的,不会在它重叠的兄弟窗口绘图;
(3) 更进一步说明,WS_CLIPSIBLINGS只是用于子窗口(For use with the WS_CHILD style only.)
(4) WS_CLIPSIBLINGS实际上还需要和控件的叠放顺序(z order)配合使用,才能看出明显的效果。
本文的源代码:
本文的源代码.
- WS_CLIP特性 文章
- postgres 9.4 新特性文章
- Java8特性系列文章目录
- 文章标题HTML5新增特性
- .NET2.0,3.5 新特性系列文章
- Oracle 11g新特性最新文章
- C# 3.0新特性之扩展函数(相关文章)
- 引用“子非鱼”的文章(关于C#Attribute(特性))
- 转载一篇很有特性的文章“夏衲”
- 介绍Dynamic特性(C#4.0)的好文章
- 【翻译自mos文章】Oracle 11gR2 relink 新特性
- 一篇不错的关于GCC特性的文章
- 特性
- 特性
- 特性
- 特性
- [投稿文章] J2SE(TM) 5.0专题 之 语言特性 //勘误信息请直接回复
- 【翻译自mos文章】ABMR:在asm 环境中测试Automatic Block Recover 特性的方法
- 关于Zaker图片启动页面的效果实现
- java动态代理(JDK和cglib)
- jaxb的优点和用法
- MAVEN三大特性,很实用
- InvocationHandler中invoke()方法的调用问题
- WS_CLIP特性 文章
- HttpServer的简单运用
- linux下which、whereis、locate、find 命令的区别
- 深入了解JVM—内存区域
- Android SDK Manager升级失败时,可以这样做
- 全自动过滤器:应用生物膜法利用全自动过滤器降解有机物
- PBOC/EMV之DES算法
- 利用urllib2通过指定的URL抓取网页内容
- 关于微软研究院(谢幸、郑宇研究员主导的)“智能城市”“智能生活”研究的一个归纳