-1

我有一个应用程序,它的窗口位于其他窗口的前面,但也通过检查 Z 顺序并在它不是最上面的情况下向前移动来保持在其他“停留在顶部”窗口的前面。这没问题,除了我的窗口有弹出组合框和提示之类的控件的地方。然后发生的事情是窗口在提示等前面移动。

我尝试的逻辑是查看前面窗口的句柄,然后尝试查看它的所有者(使用 getwindow (h,GW_OWNER))或父窗口(getparent(h))是否是我的窗口。未能继续递归调用以查看我的窗口是否是其父级的父级等。

这不起作用,然后我的应用程序尝试将自己置于不理想的弹出控件前面。对其他方法有什么建议吗?

谢谢特里

4

3 回答 3

0

你无法可靠地解决这个问题。

你所做的是玩墙和梯子游戏的变体。没有人能赢得它。

在这种情况下,您既要构建墙(组合框、提示等),又要构建梯子(希望位于顶部的窗口)。即使你不这样做,你也不会赢。

请参阅如何创建一个永远不会被其他最顶层窗口覆盖的最顶层窗口?.

于 2013-07-11T08:50:43.743 回答
0

正如 Sertac Akyuz 建议的那样,跟踪窗口的进程 ID 并将其与您自己的 ID 进行比较是识别窗口所有权的一种方法。

于 2013-07-11T22:52:38.497 回答
0

提示将应用程序句柄作为父级和所有者。所以测试 h=application.handle 为他们解决了这个问题。组合框似乎是一个不同的故事,并调用让父返回 65556 和所有者给 0。

于 2013-07-11T04:08:58.543 回答