-1

我有一个窗口,它是 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扩展样式属性时,它仍然处于打开状态。即使我将窗口放在最上面的窗口之后,是否可以关闭最上面的位?

4

2 回答 2

2

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

于 2016-01-24T22:06:16.533 回答
1

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

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

注意:上面的讨论完全忽略了所有者和拥有窗口的问题。我将它们排除在外是因为它们会增加一层复杂性,从而分散主题的注意力。

                                *Raymond Chen - The Old New Thing* 

链接到 Raymond 的博客网站

还有什么要说的?...

于 2016-01-25T21:23:34.050 回答