【问题标题】:Win32 How to bring a modeless dialog box to the topWin32如何将无模式对话框置于顶部
【发布时间】:2015-01-21 12:25:19
【问题描述】:

我打开了一组无模式对话框,但我无法终生单击其中一个使其出现在前台。它获得焦点,但对话框永远保持它们在屏幕上的创建顺序。最后一个创建的总是在前景中,遮挡(或部分遮挡)其他的。

我试过了:

  • SetActiveWindow(hDlg);
  • SetForegroundWindow(hDlg);
  • SwitchToThisWindow(hDlg, FALSE);

响应 WM_LBUTTONUP 消息,但尽管它们被调用,但它们什么也不做。我在对话框属性中尝试了不同的配置,例如使用“SetForground”或“Topmost”参数,但它们什么也没做。

我在尝试完成一项不可能完成的任务吗?

【问题讨论】:

    标签: winapi dialog win32gui


    【解决方案1】:

    造成这种情况的原因是窗口所有权。拥有的窗口始终显示在其所有者的上方。这在documentation 中有描述。

    显然,您的无模式对话框之间存在所有权关系。您可以通过使每个无模式对话框归同一个窗口所有来解决此问题。

    您如何控制所有权取决于您创建这些对话框的方式。如果您使用的是CreateDialog,那么第三个参数用于指定对话框的所有者。

    【讨论】:

    • 祝福你!我整天都在努力解决这个问题。将该父参数设置为 NULL 并执行此操作; exe是父级。我想我曾经知道这一点,因为我在 9 年前编写的一个大型 Win32 程序运行正常。 9 年零一个人记得一些事情……但不是全部。
    • 你有主窗口吗?通常你会期望它是你的无模式对话框的所有者。
    • 其实我没有。我的主窗口是一个无模式对话框
    • 如果您将所有者设置为 NULL 就可以了。但是你所有的对话框都会有任务栏按钮
    • 为什么不将作为主窗口的无模式对话框设置为其他窗口的所有者。
    猜你喜欢
    • 2020-07-20
    • 2013-11-23
    • 2010-10-29
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多