原文转自 http://www.th7.cn/system/win/201406/60715.shtml

窗口在子窗口链中的先后顺序也就是窗口在屏幕上显示时的前后顺序,在子窗口链里位置越靠前的窗口显示时也越靠前,这个前后顺序就是Z-Order。Z-Order在前的顶层窗口会遮挡Z-Order在后的顶层窗口;屏幕上的一块区域需要刷新(Update)时,同一个子窗口链中Z-Order在前的窗口先刷新,Z-Order在后的窗口后刷新。有父/子关系的窗口是父窗口先刷新,子窗口后刷新,

  顶层窗口生成时,窗口管理器会把它加到(桌面窗口的)子窗口链的最前面,也就是Z-Order的最前面,使整个窗口都可见。子窗口的Z-Order要高于它的父窗口,因此会显示在父窗口前面,但任何一个子窗口的Z-Order都不会超过其父窗口的Z-Order更靠前的兄弟窗口。改变窗口的Z-Order可使用SetWindowPos函数。

子窗口生成时,与顶层窗口的情况有所不同,窗口管理器会把它加到父窗口的子窗口链的最后面。这似乎是反直觉的,为什么会这样呢?窗口管理器这样做是有原因的,其主要目的是让后生成的窗口能显示在前面(兄弟窗口间有重叠的情况下),并且子窗口间的Tab-Order与窗口的生成顺序相同,这样的效果才是符合直觉的。子窗口大多数情况下都共用其父窗口的显示DC(Device Context),所以在刷新时是可以在其兄弟窗口的客户区上绘画(draw)的,这就造成了Z-Order在后的子窗口因为刷新顺序在后,绘画能覆盖Z-Order在前的窗口,显示效果反而在前的现象,如下图所示:

图2.子窗口相互覆盖示意图(无WS_CLIPSIBLINGS风格)

如果想使Z-Order在前的子窗口显示时也在前(覆盖Z-Order在后的子窗口),需要使用WS_CLIPSIBLINGS窗口风格(后面详述)。

最新文章

  1. 背压(Backpressure)机制
  2. 图解修改mysql的默认数据库存放目录
  3. Android 控件架构
  4. UVA 12382 Grid of Lamps --贪心+优先队列
  5. 转一个 C#基础类库
  6. C语言学习笔记---谭浩强
  7. DevExpress ASP.NET 使用经验谈(9)-Dev控件客户端事件 ClientSideEvents
  8. cocos2dx 制作单机麻将(二)
  9. Java设计模式透析之 —— 适配器(Adapter)
  10. lpc1768的PWM使用
  11. Eclipse 改变字体大小,设置背景色
  12. JAVA基础-----Maven项目的搭建
  13. Linux之文件权限
  14. [算法] 举一反三之n重复数组中找唯一m重复异类数
  15. 【Static Program Analysis - Chapter 4】格理论(Lattice Theory)与程序分析
  16. 20155237 2016-2017-2 《Java程序设计》第8周学习总结
  17. Linux无法解析gitlib的地址--修改dns
  18. Spring,hibernate,struts的面试笔试题(含答案)
  19. Node复制文件
  20. 配置独立于系统的PYTHON环境

热门文章

  1. python class 巩固
  2. VS/Qt C++和Matlab混合编程
  3. zabbix3.2安装手册
  4. day3- python 注册
  5. 使用python3调用MyQR库生成动态二维码(附源代码)
  6. cpu位图
  7. JQuery根据字母检索元素并导航到指定位置
  8. 利用virt-manager,xmanager, xshell启动界面来管理虚拟机
  9. iOS ifdef ifndef endif
  10. C++ 指针的小知识