MFC应用程序终止时运行自定义代码:d'tor或WM_CLOSE?

时间:2013-04-09 13:56:05

标签: c++ mfc dialog

我有一个基于对话框的MFC应用程序,需要停止Windows Wifi服务才能正常运行,但我想在我的应用程序退出时再次启用它。

所以我想我会把重启服务的代码放在主对话框类的析构函数中。

现在我注意到其他人将他们应该在程序终止期间运行的代码放入WM_CLOSE消息处理程序。

这两种方式似乎都有效,但我想知道这两种方式是否有缺点。

2 个答案:

答案 0 :(得分:3)

对于基于MFC对话框的应用程序,您可以在主对话InitInstance调用后立即将完成代码放置到应用程序类DoModal方法。对于其他MFC应用程序类型(MDI,SDI),最终化代码通常放在ExitInstance方法中。

基于对话框的应用程序与SDI / MDI应用程序之间的区别在于,基于对话框的应用程序中的InitInstance返回FALSE,并且应用程序退出 - 所有操作都在主对话框DoModal调用中完成。

您可以更喜欢将ExitInstance用于所有应用类型,它也应该可以使用。

修改即可。如果你想在对话框类中创建清理代码,WM_DESTROY(Roger Rowland已经提到过)比WM_CLOSE更好。有时我们可以处理WM_CLOSE消息并阻止关闭对话框,例如,通过询问“退出程序?是 - 否”。在您想要使用某些子窗口的情况下,它们存在于WM_CLOSEWM_DESTROY消息处理程序中,并且不存在于对话框析构函数中。此外,调用主对话框析构函数时,消息队列不存在,因此在这种情况下不应使用Windows消息传递。

答案 1 :(得分:3)

旨在保持对称性:如果要在构造函数中停止wifi服务,则在同一个类的析构函数中重新启动它。如果您在InitInstance中停止服务,则会在ExitInstance中重新启动它;如果作为对WM_CREATE或其他消息的回复,请在WM_CLOSE等中重启

构造函数和析构函数无法返回错误状态,因此通常它们更适合于初始化和内存分配/释放等简单任务。

InitInstanceExitInstance以及WM_CLOSE等Windows消息发生在应用程序生命周期中的一个好位置,以便在必要时显示错误消息,或者为了响应而中止错误条件。