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

Posted

技术标签:

【中文标题】如何在 Visual Studio 中禁用基于对话框的 MFC 应用程序的自动关闭?【英文标题】:How to disable autoclosing of a dialog-based MFC application in Visual Studio? 【发布时间】:2012-06-12 09:46:46 【问题描述】:

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

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

EDIT2:我的对话框继承自CDialogEx

【问题讨论】:

你的代码中有一些东西使它接近。没有办法“禁用”它。你必须修复你的错误。我的意思是,“N 秒后自动关闭”不是基于对话框的 MFC 应用程序的标准功能,并且没有启用或禁用它的标志或样式。 是的。当您在 Visual Studio 中创建一个新的基于对话框的应用程序并运行“调试 -> 不调试启动”时,它会像我描述的那样自行关闭。 我从来没有见过这种情况,我用过 VS6、2003、2005 和 2008。我很有信心在 VS2010 或 2012 中也不会发生这种情况,但我不能100% 确定。无论如何,我刚刚制作了一个测试应用程序,然后点击“不调试就开始”,你知道吗?它并没有关闭。所以你有一些东西可以让它接近。它可能是代码中的错误、配置问题、操作系统问题、其他一些应用程序导致它关闭......但 MFC 应用程序不会自行关闭。 我会支持@MikMik 的断言。这不是 Visual Studio 或 MFC 功能。如果您的程序在 10 秒后关闭,而您没有对其进行编码,那么您在某处遇到了一个错误,导致该程序在该时间后崩溃。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

通常对话框不会那样做。

但默认情况下,它们会关闭 OnOk (CDialog::OnOk),即“按下 Enter 键” 和 OnCancel (CDialog::OnCancel()) 即“Esc Key Pressed”

尝试在 Dialog 中重载这两个,看看它们是否被调用并处理 你喜欢的行为。

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

这里有很多可以用 Dialog 完成的示例(尤其是 OnOk、OnCancel 和 Close)CDialog Examples

【讨论】:

【参考方案3】:

我在使用 Visual Studio 2013 时遇到了同样的问题:

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

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

我的杀毒软件是Avast

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

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

可以在 Avast 的论坛上找到有关此解决方案的更多详细信息,来自此讨论: https://forum.avast.com/index.php?topic=139935.0

【讨论】:

【参考方案4】:

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

感谢所有反对票。

【讨论】:

您未能识别问题并提供错误答案,将意外行为归咎于 Visual Studio。真正的原因是代码中的错误。 请注意,没有人证实它不会在 VS 2010 中发生。原帖的评论者说他在 2010 年没有尝试过。 @janko-m 我有点确认 Visual Studio 2010 不会发生这种情况。就像所有其他人指出的那样,这似乎不是 Visual Studio 的问题。更可能是特定设置 matija 正在使用的问题(一些在后台运行的“生产力”工具,过时/错误配置的构建环境,用“拉皮条”替换了默认 MFC 项目模板,VS 安装在预览安装之上,没有首先卸载它,等等)【参考方案5】:

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

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

【讨论】:

以上是关于如何在 Visual Studio 中禁用基于对话框的 MFC 应用程序的自动关闭?的主要内容,如果未能解决你的问题,请参考以下文章

通过 Visual Studio 项目文件禁用驱动程序签名

我们可以在基于对话框的 mfc Visual Studio 2010 中绘制形状(线、圆等)吗?

如何根据用户输入创建动态变化的对话框 Visual Studio 2010 (mfc)

如何在 Visual Studio 2012(或 Resharper)中禁用 /* 自动完成

如何在Visual Studio中禁用ReSharper并再次启用它?

如何在 Visual Studio 2017 中禁用 JavaScript 构建错误?