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

Fel*_*bek 5 c++ mfc dialog

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

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

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

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

Ale*_*x F 3

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

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

您可以更喜欢用于ExitInstance所有应用程序类型,它应该也可以工作。

编辑。如果您想在对话框类内部编写清理代码,WM_DESTROY(罗杰·罗兰已经提到过)是比WM_CLOSE. 有时我们可以处理WM_CLOSE消息并阻止对话框关闭,例如,通过询问“退出程序?是 - 否”。如果您想使用某些子窗口,它们存在于WM_CLOSE消息WM_DESTROY处理程序中,而不存在于对话框析构函数中。另外,当调用主对话框析构函数时,消息队列不存在,因此在这种情况下不应使用 Windows 消息传递。