我有一个应用程序,其窗口保持在其他窗口的前面,但是通过检查Z顺序并且如果它不是最顶层的话,它也会停留在其他“保持在顶部”窗口的前面。这工作正常,除了我的窗口有控件,如组合框和提示弹出窗口。然后会发生什么是窗口在提示等前面移动。
我尝试的逻辑查看前面窗口的句柄,然后尝试查看其所有者(使用getwindow(h,GW_OWNER))或父(getparent(h))是否是我的窗口。如果没有继续以递归方式调用,看看我的窗口是否是其父窗口的父窗口等。
这不起作用,然后我的应用程序试图将自己放在弹出控件的前面,这是不理想的。有关其他方法的任何建议吗?
由于 特里
答案 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进行比较是识别窗口所有权的一种方法。