如何从内部自动关闭我的GUI应用程序?

时间:2014-07-25 06:08:49

标签: c++ winapi mfc windows-shell

让我用一个例子来解释我的问题。在我的应用程序中,我需要提供一种从“自身”内自动关闭它的方法。 (这种功能的一个例子是我的应用程序的安装程序/更新程序在安装更新之前需要关闭它。另一个例子是我的应用程序按计划执行操作并且需要在完成后自动关闭。)

我认为在最简单的情况下将WM_CLOSE消息发布到自己的窗口将完成此任务,但是有以下情况不适用于此:

  • 我的应用可能会显示任意数量的子对话窗口。

  • 我的应用可能正在显示一个公共控制窗口,例如“打开文件”对话框:

enter image description here

或者这个,但也可能有其他人:

enter image description here

  • 最后,如果关闭按钮不可用,可以做什么:

enter image description here

目前,我只是试图终止我的流程(使用内部的exit()方法,或使用外部的TerminateProcess方法。)

但我很好奇,如果有更多优雅的方式关闭我的GUI应用程序(从内部)?

2 个答案:

答案 0 :(得分:0)

没有单一的答案,这取决于您的应用程序的架构及其所做的事情。我不太明白为什么你想要在一个公共对话框中强制关闭你的应用程序,但如果你这样做,那么exit()是安全的。在这种情况下,与强制终止(TerminateProcess)相反,该过程实际上是从操作系统的角度关闭的。理论上,TerminateProcess可能会使OS中的对象(DLL全局数据等)处于不一致状态,而exit()在这方面会更清晰。

一般情况下,我会避免让用户看到的可视用户界面消失,而是关闭窗口以响应某些用户的选择。

但是,exit()会起作用。

答案 1 :(得分:0)

您可以使用exit(),但关闭窗口的更安全方法是:

SomewWindow->的ShowWindow(SW_HIDE);

然后你可以销毁窗口对象或稍后显示窗口。