如何在 Visual Studio 中禁用基于对话框的 MFC 应用程序的自动关闭

How to disable autoclosing of a dialog-based MFC application in Visual Studio?

本文关键字:MFC 对话框 应用程序 Visual Studio      更新时间:2023-10-16

当我启动程序时,我得到了对话框和所有内容。但它在大约 10 秒后自行关闭。如何禁用它?

编辑:当我运行"调试 ->启动而不调试"时,就会发生这种情况。这是我知道如何运行程序的唯一方法。

编辑2:我的对话框继承自CDialogEx

如果你的对话框不是模态的,即你没有使用 DoModal() 成员函数触发它,那么它可能正在使用构造函数创建,并在它超出范围时用析构函数删除。 您可以在初始屏幕的某些实现中看到这种类型的行为。 若要弄清楚发生了什么,请在对话框析构函数上放置一个断点,并查看导致断点的调用堆栈。 还值得在调试器中打开所有异常,因为您可能会遇到正在终止应用的未捕获异常。

正如其他人已经说过的那样,这不是MFC应用程序的正常行为。

通常对话框的行为方式不是这样。

但默认情况下,它们关闭OnOk(CDialog::OnOk),即"按下输入键"和 OnCancel (CDialog::OnCancel()),即"Esc Key Pressed"

尝试在对话框中重载这两个,以查看它们是否被调用并处理那里的行为随心所欲。

也许还应该处理或监视 Close 事件。

以下是许多可以使用对话框执行的操作示例(尤其是 OnOk、OnCancel 和 Close) CDialog 示例

>我在Visual Studio 2013中遇到了同样的问题:

我正在使用Visual Studio向导(基于对话框,基于单个/多个文档)创建最基本的MFC应用程序,并且只是重新编译生成的代码。完全不修改代码。

我刚刚发现当我关闭防病毒软件时不会发生"重新启动"。这不是Visual Studio中的错误,而是环境问题。

我的防病毒软件Avast

Avast的解决方案是关闭深屏功能。

在那里,转到设置/主动保护/深屏 - 并禁用它。

有关此解决方案方法的更多详细信息,请访问 Avast 的论坛,从此讨论中:https://forum.avast.com/index.php?topic=139935.0

确认,这发生在Visual Studio 2010中,而不是在Visual Studio 2008中发生。这意味着所有的反对票都是完全没有必要的。这是Visual Studio 2010的默认设置,我没有改变任何东西。我也没有犯任何错误,因为我明确表示我在不更改任何内容的情况下创建了一个新应用程序。

感谢所有的反对票。

只是为了记录,我使用Visual Studio 2010尝试了这个。我选择了基于对话框的应用程序,并将所有其他选项保留为默认设置。编译了 x86 和 x64 的调试和发布配置。使用"启动而不调试"启动时,四个可执行文件都不会自行终止。

如果这种情况发生在您身上,我会假设您有一些应用程序正在运行(在后台)干扰预期的行为。尝试设置虚拟机,安装干净的Visual Studio,然后再次执行相同的过程。