C++我的窗体应该保持在每种窗口的顶部

C++我的窗体应该保持在每种窗口的顶部,c++,modal-dialog,C++,Modal Dialog,我有一个主窗体。此主窗体生成另一个窗体。在访问其他窗口之前,应先填写此新表单。我使用Myform.ShowDialog使此表单成为模态 我希望我的表单将位于所有其他窗口的顶部,即使这些窗口不是我的应用程序的一部分,例如:Internet explorer页面、打开的Word文档 你有什么解决办法吗 谢谢,听起来你在使用.NET 在这种情况下,可以使用Form.TopMost属性 myForm->TopMost = true; myForm->ShowDialog(); 使用Form

我有一个主窗体。此主窗体生成另一个窗体。在访问其他窗口之前,应先填写此新表单。我使用Myform.ShowDialog使此表单成为模态

我希望我的表单将位于所有其他窗口的顶部,即使这些窗口不是我的应用程序的一部分,例如:Internet explorer页面、打开的Word文档

你有什么解决办法吗


谢谢,

听起来你在使用.NET

在这种情况下,可以使用Form.TopMost属性

myForm->TopMost = true;
myForm->ShowDialog();

使用Form.TopMost将使窗口显示在应用程序中任何其他窗口的上方,但它不适用于其他应用程序

虽然我见过一些应用程序使其窗口浮动在所有其他窗口之上,但我认为您无法创建阻止您使用其他应用程序的模式对话框

一个真正肮脏的黑客将有一个定时器强制你的窗口到前景每秒钟。这意味着用户将无法以有意义的方式使用任何其他应用程序,但他们肯定会因此讨厌你


您还可以尝试模拟WindowsVista/7风格的UAC对话框,方法是拍摄桌面快照,制作一个包含该图像的全屏窗口,然后在顶部渲染窗口。然而,经验表明,用户也不喜欢那些UAC对话框。

不会这样做吗?在MFC工作?

陈雷蒙证明了为什么这是不可能的:


想象一下,如果应用程序能够做到这一点,您做到了,而另一个应用程序也做到了。现在很明显,应用程序将位于每个窗口的顶部,包括您的窗口,而您的应用程序将位于其他窗口的顶部,包括他们的窗口。你的窗户在他们的上面,而他们的窗户在你的上面,这在逻辑上是不可能的。因此,从逻辑上讲,任何应用程序都不可能声明最上面的窗口。

这是非常令人讨厌的程序行为。你真的有阻止所有用户应用程序的正当理由吗?我怀疑。我怀疑真的有办法做到这一点,因为如果两个应用程序都做到了呢?哪一个会在前面?有很多方法可以做到,但这很烦人,而且很可能是没有道理的。只是不要这样做。对于那些试图支配我工作方式的程序员来说,地狱里有一个特别的地方。不是这样,启动VisualStudio试试吧。例如,在C中创建一个新的表单应用程序,并在Load方法中设置this.TopMost=true。然后将另一个窗口聚焦在它上面。此功能至少在Windows 95之后出现过,可能更久。传统上,它被称为“始终在顶部”。如果在对话框弹出时是您的应用程序在焦点上,则这是正确的。但是如果对话框弹出时焦点在internet explorer上,窗口将停留在后面,直到您选择它。谢谢,我认为这将在应用程序中起作用,但不会停留在其他程序的windows顶部。这是您在windows AFAIK中所能获得的最好结果。在Windows3.1中,甚至Windows95中,它曾经是可能的,但现在已经不可能了。好东西也是,恼人的行为:-其中一个窗口将是最高的,违反了另一个应用程序可以使其窗口最高的前提。