Win32 如何将无模式对话框置顶
Win32 How to bring a modeless dialog box to the top
我打开了一组非模式对话框,但我终究无法单击其中的一个使其出现在前台。它获得了焦点,但对话框永远按照它们在屏幕上创建时的顺序保留。最后创建的一个总是在前景中,遮挡(或部分遮挡)其他。
我试过:
- SetActiveWindow(hDlg);
- SetForegroundWindow(hDlg);
- SwitchToThisWindow(hDlg, FALSE);
响应 WM_LBUTTONUP 消息,但尽管他们被调用但他们什么也不做。我在对话框属性中尝试了不同的配置,比如使用 'SetForground' 或 'Topmost' 参数,但它们什么也没做。
我是在尝试完成一项不可能完成的任务吗?
造成这种情况的原因是 window 所有权。拥有的 window 始终显示在其所有者上方。 documentation.
中对此进行了描述
很明显,您的无模式对话框之间存在所有权关系。您可以通过使每个无模式对话框都属于相同的 window.
来解决此问题
您如何控制所有权取决于您如何创建这些对话框。如果您使用 CreateDialog
,则第三个参数用于指定对话框的所有者。
我打开了一组非模式对话框,但我终究无法单击其中的一个使其出现在前台。它获得了焦点,但对话框永远按照它们在屏幕上创建时的顺序保留。最后创建的一个总是在前景中,遮挡(或部分遮挡)其他。
我试过:
- SetActiveWindow(hDlg);
- SetForegroundWindow(hDlg);
- SwitchToThisWindow(hDlg, FALSE);
响应 WM_LBUTTONUP 消息,但尽管他们被调用但他们什么也不做。我在对话框属性中尝试了不同的配置,比如使用 'SetForground' 或 'Topmost' 参数,但它们什么也没做。
我是在尝试完成一项不可能完成的任务吗?
造成这种情况的原因是 window 所有权。拥有的 window 始终显示在其所有者上方。 documentation.
中对此进行了描述很明显,您的无模式对话框之间存在所有权关系。您可以通过使每个无模式对话框都属于相同的 window.
来解决此问题您如何控制所有权取决于您如何创建这些对话框。如果您使用 CreateDialog
,则第三个参数用于指定对话框的所有者。