Sat*_*Okh 7 c++ windows winapi z-order
我想把一个窗口(来自其他应用程序)带到前面.目前我正在使用:
::SetWindowPos(hwnd, GetForegroundWindow(), 0, 0, 0, 0, SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
Run Code Online (Sandbox Code Playgroud)
它工作正常,但在一些(我不知道)的情况下,它使窗口始终在顶部.根据MSDN,我应该使用它HWND_NOTOPMOST,GetForegroundWindow()但它不起作用 - 窗口停留在其他(不总是在顶部)窗口下.
如何在不激活前面的情况下将窗户拉到前面?
Ser*_*yuz 11
另一个应用程序的窗口可以暂时"最顶层"将其置于前面而不激活它,首先HWND_TOPMOST在SetWindowPos调用中指定为'hWndInsertAfter' ,然后HWND_NOTOPMOST在第二个调用中指定(两个调用都SWP_NOACTIVATE在'uFlags'中).如果由于操作而移除了最顶级窗口的风险,那么WS_EX_TOPMOST可以事先通过调用来测试ex风格GetWindowLong[Ptr].
如果有一个特定的窗口,其他应用程序的窗口需要在前面(而不是在所有窗口的前面),那么该窗口的所有者可以再次临时设置到它需要在前面的窗口.GetWindowLong[Ptr]with GWL_HWNDPARENT可用于存储窗口的原始所有者,然后调用以SetWindowLong[Ptr]设置临时所有者,然后调用SetWindowPoswith HWND_TOP,然后再次恢复原始所有者SetWindowLong[Ptr].
| 归档时间: |
|
| 查看次数: |
6333 次 |
| 最近记录: |