始终位于最前面的对话框
有没有办法在 C++ MFC 中创建一个无模式对话框,该对话框始终位于应用程序中其他窗口的顶部? 我的想法有点像 Visual Studio 2005 中的“查找”对话框 - 它位于顶部,但您仍然可以编辑底层文本。
(如果有什么区别的话,那它不是 MDI;它是一个基于对话框的应用程序)
Is there a way to create a modeless dialog box in C++ MFC which always stays on top of the other windows in the application? I'm thinking sort of like the Find dialog in Visual Studio 2005 - where it stays on top, but you can still edit the underlying text.
(If it makes any difference, it's not MDI; it's a dialog-based app)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
注意:这不适用于 Windows 10,并且可能不适用于 Windows 7 和 8(报告有所不同)。
来自 完成:
正如您在评论中提到的,上面的行使窗口位于每个应用程序的顶部。 您需要执行
“使窗口仅位于您的应用程序之上”的操作。
Note: This does not work under Windows 10, and may not work under Windows 7 and 8 (Reports vary).
From Nish:
As you mentioned in the comments, the above line makes the window sit on top of every application. You'll need to do
To make a window sit on top of only your application.
对于 Windows 7 或更高版本,接受的答案失败。 (或者也许是我)
但是将非模式对话框设置为弹出窗口而不是子对话框可以解决这个问题。
它现在定位在主对话框窗口中,但您可以编写代码来约束任何地方。
使用无边框或顶部栏使其成为一个简单的窗口。
The accepted answer fails for Windows 7 or above. (Or perhaps its me)
But making the modeless dialog as popup instead of child solves it.
It now gets positioned wrt main dialog window but you can write code to constrain anywhere.
Using the no border or top bar makes it a simple window.
它在 Microsoft Windows 版本
10.0.18362.476
中对我有用。 必须将SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
放在OnInitDialog
中,并将对话框设置为>弹出窗口
。It worked for me in Microsoft Windows Version
10.0.18362.476
. Had to putSetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
inOnInitDialog
and make the dialog as aPopUp
.