拦截 WM_CLOSE 进行清理操作

Joh*_*ost 5 c++ winapi termination exit

我有一个外部应用程序调用我的应用程序,并应该在工作完成后结束它。该外部应用程序的日志声称它WM_CLOSE在我的应用程序上使用。

如何拦截WM_CLOSE应用程序中的消息以执行一些清理操作?我尝试at_exit()将其包装在一个类中,但我认为我的方法是错误的。

MSa*_*ers 5

控制台应用程序的官方解决方案是HandlerRoutine,由SetConsoleCtrlHandler. CTRL_CLOSE_EVENT如果退出, Windows 将使用参数调用您的处理程序WM_CLOSE

当您将类方法与 一起使用时SetConsoleCtrlHandler,它必须是一个static方法 - Windows 不会为您提供this指针。


Pis*_*3.0 2

您可以在消息循环中处理 WM_CLOSE 来执行任何必要的清理操作,甚至中止关闭(通过返回 1 而不是 0)。参见例如:http://cboard.cprogramming.com/windows-programming/141438-handling-wm_close-wm_destroy.html#post1056273

编辑:对于控制台应用程序,这可能令人感兴趣:http ://support.microsoft.com/kb/178893