winapi中的Z索引

winapi中的Z索引,winapi,Winapi,我不仅需要能够设置窗口的z-type(总是顶部/总是底部/等等),还需要设置窗口的z-index(0..+inf) z索引值较小的窗口​​应低于具有更大尺寸的窗口。 我知道SetWindowPos及其参数HwnInsertafter,使用它我可以实现我想要的,但这种方法似乎太复杂了。 有更好的解决方案吗?窗口子系统维护以下列表: 系统在单个列表中维护z顺序 您可以移动此列表中的窗口(例如,通过调用),将上一个窗口作为索引传递,或HWND\u TOP将窗口移到前面。没有使用序号作为索引的API 如

我不仅需要能够设置窗口的z-type(总是顶部/总是底部/等等),还需要设置窗口的z-index(0..+inf)

z索引值较小的窗口​​应低于具有更大尺寸的窗口。 我知道SetWindowPos及其参数HwnInsertafter,使用它我可以实现我想要的,但这种方法似乎太复杂了。

有更好的解决方案吗?

窗口子系统维护以下列表:

系统在单个列表中维护z顺序

您可以移动此列表中的窗口(例如,通过调用),将上一个窗口作为索引传递,或
HWND\u TOP
将窗口移到前面。没有使用序号作为索引的API


如果需要在另一个窗口之前插入一个窗口,请先调用
(GW\u hwndprov)
,然后作为hwninsertafter传递。如果z顺序中前面没有窗口,
GetNextWindow
返回
NULL
,它方便地映射到
HWND\u TOP

感谢您的回答@IInspectable。我在问题中表示我了解SetWindowPos。我希望(例如)在移动窗口并对其失去焦点后,其z顺序与移动前保持相同。期望的行为:我设置了z索引。用户通过gui移动窗口。当它完成其z索引窗口时,仍与运动之前一样。如果我使用SetWindowPos设置z-index,它将无法按上述方式工作。@MaximFedorov:如果需要永久保留窗口子集之间的相对z顺序,请设置所有者。拥有的窗户总是在各自的所有者面前。将所有者带到前面会自动将拥有的窗口移到前面。但也许我不明白你的问题。如果你把你的问题抽象到核心,而不是用例子来描述你的用例,这会有所帮助。你能描述一下你试图解决的潜在问题吗?