将一个窗口(无边界)放在另一个窗口(无边界)的顶部(z-index)上,这样顶部的窗口就会跟随底部的窗口

Posted

技术标签:

【中文标题】将一个窗口(无边界)放在另一个窗口(无边界)的顶部(z-index)上,这样顶部的窗口就会跟随底部的窗口【英文标题】:Place a window (borderless) on top (z-index) of another window (borderless) such that the one on top trails the one on the bottom 【发布时间】:2013-09-13 06:06:58 【问题描述】:

DWM 窗口操作/窗口样式的概念对我来说有点新,我正在尝试一些新情况。如果有人能帮助我指出正确的方向,我将不胜感激。

另外,您如何将第二个窗口精确地放在第一个窗口之后,而不是在它们之间保持另一个应用程序的另一个窗口?

【问题讨论】:

【参考方案1】:

您需要在其中一个窗口上处理WM_WINDOWPOSCHANGING 消息并使用SetWindowPos 来确保您保持z 顺序。您可以使用 SetWindowPos 将窗口下方的消息发送到当前窗口之前,或者在 z-order 更改时使用 HWND_TOP 参数从第二个窗口调用它到第一个窗口。

【讨论】:

您正在与之交谈的 SetWindowPos 会是什么样子?能否提供参数的伪代码? if (msg == WM_WINDOWPOSCHANGING)if((WNDPOS*)lparam)->hwndInsertAfter != lastWindowPos) SetWindowPos(otherWindowHwnd, hwnd, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE)对于上部窗口,如果您从下部窗口执行此操作,则必须更改 setwindowpos 的前两个参数 非常感谢您的解释。但是当我尝试做无边框窗口时,我失去了将它带入焦点/活动窗口的能力。所以如果我点击它,窗口就永远不会回到前面。这是来自无边界窗口的正常响应吗?我可以避免吗? 是否会将 WS_CHILD 传递给 CreateWindow 调用,以将另一个窗口作为父 HWND 的无边框窗口来解决您正在尝试的问题?它看起来像borderlessWnd = CreateWindow("ClassName", "Window Title", WS_CHILD|WS_VISIBLE, 100, 100, 300, 300, parentWnd, NULL, hInstance, NULL); 您知道如何使用direct2d 使窗口透明并在透明表面上绘制不透明像素吗?

以上是关于将一个窗口(无边界)放在另一个窗口(无边界)的顶部(z-index)上,这样顶部的窗口就会跟随底部的窗口的主要内容,如果未能解决你的问题,请参考以下文章

移动无边界WPF窗口

VB 2013:在无边界表单上启用 Aero

win32(全屏)无边框窗口重叠任务栏

无边界蛇游戏

Unity中timeline出现脚本错误怎么解决

leetcode之滑动窗口刷题总结1