德尔福形式始终处于领先地位

时间:2013-07-11 03:42:44

标签: delphi winapi

我有一个应用程序,其窗口保持在其他窗口的前面,但是通过检查Z顺序并且如果它不是最顶层的话,它也会停留在其他“保持在顶部”窗口的前面。这工作正常,除了我的窗口有控件,如组合框和提示弹出窗口。然后会发生什么是窗口在提示等前面移动。

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

这不起作用,然后我的应用程序试图将自己放在弹出控件的前面,这是不理想的。有关其他方法的任何建议吗?

由于 特里

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

你所做的是扮演Walls and Ladders游戏的变体。没有人能赢得它。

在这种情况下,你构建你的墙(组合框,提示等)和你的梯子(想要成为最顶层的窗户)。即使你不这样做,也不会赢。

请参阅How do I create a topmost window that is never covered by other topmost windows?

答案 2 :(得分:0)

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