我有一个基于对话框的MFC应用程序,需要停止Windows Wifi服务才能正常运行,但我想在我的应用程序退出时再次启用它。
所以我想我会把重启服务的代码放在主对话框类的析构函数中。
现在我注意到其他人将他们应该在程序终止期间运行的代码放入WM_CLOSE
消息处理程序。
这两种方式似乎都有效,但我想知道这两种方式是否有缺点。
答案 0 :(得分:3)
对于基于MFC对话框的应用程序,您可以在主对话InitInstance
调用后立即将完成代码放置到应用程序类DoModal
方法。对于其他MFC应用程序类型(MDI,SDI),最终化代码通常放在ExitInstance
方法中。
基于对话框的应用程序与SDI / MDI应用程序之间的区别在于,基于对话框的应用程序中的InitInstance
返回FALSE,并且应用程序退出 - 所有操作都在主对话框DoModal
调用中完成。
您可以更喜欢将ExitInstance
用于所有应用类型,它也应该可以使用。
修改即可。如果你想在对话框类中创建清理代码,WM_DESTROY
(Roger Rowland已经提到过)比WM_CLOSE
更好。有时我们可以处理WM_CLOSE
消息并阻止关闭对话框,例如,通过询问“退出程序?是 - 否”。在您想要使用某些子窗口的情况下,它们存在于WM_CLOSE
和WM_DESTROY
消息处理程序中,并且不存在于对话框析构函数中。此外,调用主对话框析构函数时,消息队列不存在,因此在这种情况下不应使用Windows消息传递。
答案 1 :(得分:3)
旨在保持对称性:如果要在构造函数中停止wifi服务,则在同一个类的析构函数中重新启动它。如果您在InitInstance
中停止服务,则会在ExitInstance
中重新启动它;如果作为对WM_CREATE
或其他消息的回复,请在WM_CLOSE
等中重启
构造函数和析构函数无法返回错误状态,因此通常它们更适合于初始化和内存分配/释放等简单任务。
InitInstance
和ExitInstance
以及WM_CLOSE
等Windows消息发生在应用程序生命周期中的一个好位置,以便在必要时显示错误消息,或者为了响应而中止错误条件。