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

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

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

【问题讨论】:

    标签: c++ user-interface mfc


    【解决方案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 使窗口透明并在透明表面上绘制不透明像素吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多