在TOPMOST窗口后放置一个窗口

时间:2016-01-24 17:37:09

标签: c winapi windows-7 z-order window-position

我有一个TOPMOST的窗口,我有另一个(myWindow)窗口,我想放在第一个窗口后面,我不想让第二个窗口成为最顶层的窗口:

SetWindowPos(topMostWin, HWND_TOPMOST, left, top, width, height, flags);
LONG_PTR exstyle = ::GetWindowLongPtr(myWindow, GWL_EXSTYLE);
if (exstyle & WS_EX_TOPMOST)
{
    exstyle &= ~WS_EX_TOPMOST;
    if( ! ::SetWindowLongPtr(myWindow, GWL_EXSTYLE, exstyle))
    {
        LOG_ERROR();
    }
}
SetWindowPos(myWindow, topMostWin, left, top, width, height, flags);

但myWindow仍然表现得像最顶级的窗口,当我检查扩展样式的myWindow WS_EX_TOPMOST属性时,它仍然打开。即使我将窗口放在最顶层的窗口之后,是否可以关闭最顶端的位?

2 个答案:

答案 0 :(得分:2)

HWND_TOP会将您的窗口置于任何最顶层窗口后面的z顺序的顶部。

答案 1 :(得分:1)

  

由于引入了“最顶层”窗口,HWND_TOP现在带来了   窗口“尽可能高的Z顺序而不违反   规则,最顶层的窗口总是出现在非最顶层的窗口上方“。   这在实践中意味着什么?

     
      
  • 如果窗口位于最顶层,则HWND_TOP将其置于Z顺序的最顶层。
  •   
  • 如果一个窗口不是最顶层的,那么HWND_TOP将它放在所有非最顶层窗口的顶部(即,在最低的最顶层窗口的正下方,       如果有的话。。
  •   
     

注意:上面的讨论完全忽略了所有者和。的问题   拥有的窗户。我把它们排除了,因为它们会添加一层   分散主题的并发症。

                                *Raymond Chen - The Old New Thing* 

link to Raymond's blog site

还有什么可说的? ...