【问题标题】:Always-in-front dialogs始终在前的对话框
【发布时间】:2010-10-10 06:06:03
【问题描述】:

有没有办法在 C++ MFC 中创建一个 modeless 对话框,该对话框始终位于应用程序中其他窗口的顶部?我的想法有点像 Visual Studio 2005 中的“查找”对话框 - 它位于顶部,但您仍然可以编辑底层文本。

(如果有什么不同,那不是 MDI;它是一个基于对话框的应用程序)

【问题讨论】:

    标签: c++ mfc dialog modeless always-on-top


    【解决方案1】:

    注意:这在 Windows 10 下不起作用,在 Windows 7 和 8 下可能不起作用(报告各不相同)。

    来自Nish

    ###让你的对话框保持在顶部

    你没看过有 “始终保持领先”选项?好吧 令人难以置信的是,你可以 让你的对话保持在最前面 一行代码。简单地说 对话类中的以下行 OnInitDialog() 函数。

    SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    

    基本上我们正在做的是使用 要更改的 SetWindowPos 函数 我们对话窗口的 Z 顺序。我们 让我们的对话始终处于首位 将其他窗口移到顶部 Z 顺序。现在即使你 激活另一个窗口,我们的窗口 将保持在顶部。但我会建议你 确保你确切地知道你的 当你这样做的时候正在做,因为它 如果他们不能得到,可能会惹恼人们 当他们挡住你的窗户时 想这样做。

    正如您在 cmets 中提到的,上面的行使窗口位于每个应用程序的顶部。你需要这样做

    SetWindowPos(&this->wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    

    使窗口仅位于您的应用程序之上。

    【讨论】:

    • 这将窗口置于绝对一切(所有其他应用程序)之上 - 有没有办法让窗口保持在它所属的应用程序之上?跨度>
    • 找到它:我使用 &this->wndTopMost 而不是 &this->wndTop
    • 请记住如果两个应用程序都创建最顶层的窗口可能发生的事情 - 最好尽量避免使用它 - 用户也会被这种行为惹恼
    • 当我发现这个正在寻找一个控制台顶部并且最终解决方案几乎相同时,让我添加一个指向现成示例的链接:stackoverflow.com/questions/27068650/…跨度>
    • 正如 Sanjeev 在他的回答中提到的那样,这失败了。我们在 Windows 10 下遇到了这个问题。
    【解决方案2】:

    对于 Windows 7 或更高版本,接受的答案失败。 (或者也许是我) 但是将无模式对话框作为弹出窗口而不是子窗口可以解决它。 它现在位于主对话框窗口中,但您可以编写代码来约束任何地方。 使用无边框或顶栏使其成为一个简单的窗口。

    【讨论】:

      【解决方案3】:

      它在 Microsoft Windows 版本 10.0.18362.476 中对我有用。必须将SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); 放入OnInitDialog 并将对话框设为PopUp

      【讨论】:

        猜你喜欢
        • 2011-11-25
        • 1970-01-01
        • 2014-05-19
        • 1970-01-01
        • 2021-05-25
        • 2018-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多