Windows 窗口层次关系

Windows 窗口层次关系


2024年5月18日发(作者:转换视频格式)

Windows 窗口层次关系

相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层

次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次

遇到了这个问题,所以便整理一下。下面就说说Windows 中桌面(Deskkop)以

及顶层窗口,以及子窗口之间的关系。

在Windows 的图形界面下,最基本显示信息的元素就是窗口,每一个Windows

窗口都管理着自己与其他窗口之间的关系和自身的一些信息,如:是否可见,窗

口的所有者,窗口的父/子关系等等信息,当窗口创建、销毁、显示的时候,就

会用到这些信息。

在每一个窗口实例中,有四个元素被窗口管理器用来建立窗口管理链表。

Child : 指向窗口子窗口的句柄

Parent: 指向窗口父窗口的句柄

Owner: 指向窗口所有者的句柄

Next: 指向下一个同属窗口的句柄

众所周知当Windows 初始化的时候,它创建桌面这个窗口,桌面覆盖着

整个窗口,窗口管理器用这个窗口作为窗口链表中第一个元素。因此桌面在窗口

的层次关系中在最上层。

在窗口层次关系中,桌面窗口下一层窗口叫做顶层窗口,顶层窗口就是那

些不是子窗口的窗口,顶层窗口不能够有WS_CHILD 属性。窗口管理器是如何

把桌面窗口和顶层窗口联系起来的呢?窗口管理器把顶层窗口都组织到一个链

表中,而这个链表的头存储的就是桌面窗口的子窗口句柄,每一个子窗口通过

Next 就可以找到链表中下一个窗口了。这个链表被称为子窗口链表,在同一个

子窗口链表中的窗口是互为同属窗口,所有顶层窗口都是同属窗口。窗口在子窗

口链表中的次序,也表明了窗口距离距离桌面窗口的距离。顶层窗口所形成的子

窗口链表构成了一个Z 轴,窗口管理器就是根据Z 序列来觉得窗口的哪一部

分是显示的,哪一部分是被遮盖的。

所有顶层窗口的父窗口都是指向桌面窗口的,这样一来顶层窗口就好像是

桌面窗口的子窗口,所有顶层窗口构成的链表是桌面窗口的子窗口链表。当顶层

窗口创建的时候,窗口管理器把顶层窗口放在Z 轴的顶上,这样使得整个窗口

可见,窗口管理器把窗口插入到桌面窗口子窗口链表的前面。WS_EX_TOPMOST

这个属性控制着窗口管理器创建顶层窗口,窗口管理器把没有

WS_EX_TOPMOST 属性的窗口放在具有WS_EX_TOPMOST 属性的窗口的后

面,这样就使得具有WS_EX_TOPMOST 属性的窗口一直显示在前面。

在顶层窗口之间还有另外一直关系,拥有或者属于其他的顶层窗口,属于

其他窗口的窗口叫做归属窗口,拥有其他窗口叫做宿主窗口,在Z 轴中,归属

窗口一定在他的宿主窗口的前面,如果一个宿主窗口最小化,那么归属他的窗口

会隐藏掉,如果宿主窗口隐藏起来,归属他的窗口不会被隐藏掉。如果有三个窗

口A、B、C ,A 拥有 B,B 拥有 C ,如果A 最小化,那么B 会隐藏,但是

C 还是可见的。怎么才能够在窗口之间建立所有关系呢?方法是在调用

CreateWindow或者CreateWindowEx 创建窗口的时候,指定hwndParent 参

数。


发布者:admin,转转请注明出处:http://www.yc00.com/xitong/1716046788a2711675.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信