我想将一个窗口带到前面(来自其他应用程序)。目前我正在使用:
::SetWindowPos(hwnd, GetForegroundWindow(), 0, 0, 0, 0, SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
它工作正常,但在某些(我不知道的)情况下,它使窗口始终位于顶部。根据MSDN,我应该使用HWND_NOTOPMOST
代替GetForegroundWindow()
但它不起作用——窗口停留在其他窗口下方(并不总是在顶部)。
如何在不激活窗口的情况下将其置于前面?
另一个应用程序的窗口可以暂时设置为“最顶层”,将其置于最前面而不激活它,首先通过指定HWND_TOPMOST
作为 'hWndInsertAfter' 在SetWindowPos
调用然后通过指定HWND_NOTOPMOST
在第二次通话中(两次通话都使用SWP_NOACTIVATE
在“uFlags”中)。如果存在删除窗口最顶层样式的风险,而该窗口已经是最顶层的操作结果,则WS_EX_TOPMOST
ex-style 可以通过调用来预先测试GetWindowLong[Ptr]
.
如果存在另一个应用程序的窗口需要位于前面的特定窗口(而不是位于所有窗口的前面),则可以再次临时将该窗口的所有者设置为它需要位于前面的窗口。GetWindowLong[Ptr]
with GWL_HWNDPARENT
可用于存储窗口的原始所有者,然后调用SetWindowLong[Ptr]
设置临时所有者,然后调用SetWindowPos
with HWND_TOP
,然后再次恢复原来的所有者SetWindowLong[Ptr]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)