窗口与窗口之间的关系

Posted on 2018-04-26 17:17  moisiet  阅读(327)  评论(0编辑  收藏  举报

参考文章:http://www.cnblogs.com/dhatbj/p/3288152.html

一、桌面窗口:

DesktipWindow,是所有窗口的父窗口,通过hwnd=::GetDesktopWindow()获取。

二、窗口样式:

只有三种窗口:重叠窗口(WS_OVERLAPPED)、弹出窗口(WS_POP)、子窗口(WS_CHILD,其中弹出窗口不能是子窗口)。

重叠窗口和弹出窗口统称为顶层窗口。

因此窗口样式再次分为:顶层窗口和子窗口。

可以这么说

三、topmost窗口:

topmost窗口是具有WS_EX_TOPMOST风格的窗口,是窗口的一种扩展风格,topmost窗口只能是顶层窗口,不能是子窗口

具有topmost风格的窗口的顶层窗口的Z-ORDER比不具有该风格的要小,显示在前面。

四、Z-Order:

z-order在前(小)的窗口先显示出来,先显示出来的窗口会被后显示出来的窗口覆盖。

每个父窗口都有一个链表,用于保存子窗口,该链表保存子窗口的前后顺序就是该子窗口的z_order的顺序。z_order在前(z_order小)的窗口先显示出来

对于顶层窗口,z_order在前的窗口显示在最前面,因为顶层窗口默认强制加了WS_CLIPSIBLINGS风格,导致后面刷新的窗口被覆盖的地方不刷新,使得z_order在前的窗口显示在最前面

对于子窗口,情况与顶层窗口相反,z_order在前的窗口被在后的窗口覆盖。因为它默认没有添加WS_CLIPSIBLINGS风格。

而子窗口的z_order比父窗口的z_order要大,因为只有父窗口显示出来了才能显示子窗口,子窗口在后面显示表示它的z_order要大。

HWND hwnd=::GetWindow(hWnd_rel,flag)用于获取对hWnd_rel有flag关系的窗口的句柄。