MSDN原文(英語)
關閉窗口
當用戶關閉一個窗口,該動作觸發一個窗口消息序列。
用戶可以點擊“關閉”按鈕或通過使用鍵盤快捷鍵(如 ALT+F4),這些動作引起窗口收到WM_CLOSE消息,WM_OLOSE消息讓你有機會在關閉窗口前提示用戶。如果你真的想關閉窗口,調用DestroyWindow函數;否則WM_CLOSE消息簡單的返回零,並且操作系統將忽略該消息並不銷燬窗口。
下面的例子程序是如何處理WM_CLOSE消息:
case WM_CLOSE:
{
if(MessageBox(hwnd,L"確實要退出?",L"我的應用程序"),MB_OKCANCEL == IDOK)
{
DestoryWindow(hwnd);
}
//其它:用戶取消了,什麼也不做
return 0;
}
在這個例子裏,MessageBox函數顯示一個包含“確定”和“取消”按鈕的模式對話框。如果用戶點擊“確定”按鈕,程序調用DestroyWindow函數。而用戶點擊了“取消”按鈕,將DestroyWindow函數的調用取消,窗口仍舊保持。無論哪種情況,都要返回零表明你已經處理消息。
如果你想在不提示用戶情況下關閉窗口,你可以簡單的調用DestroyWindow而不用調用MessageBox。然而,在這種情況下有一個更快的方式,回想一下,DefWindowProc函數執行任何窗口消息的默認操作。在WM_CLOSE情況下,DefWindowProc自動調用DestroyWindow。這意味着,如果你在switch語句中忽略了WM_CLOSE消息,默認情況下窗口被銷燬。
當一個窗口即將被銷燬,它接收到一個WM_DESTROY消息,這個消息發送在窗口從屏幕上刪除後但在窗口被銷燬之前(特別是任何窗口被銷燬之前)。
在你的應用程序主窗口,你通常會調用PostQuitMessage來響應WM_DESTROY。
case WM_DESTROY:
PostQuitMessage(0);
return 0;
我們看到在窗口消息部分,PostQuitMessage在消息隊列中放一個WM_QUIT,使消息循環結束。
下面是一個流程圖,顯示了典型的方法來處理WM_CLOSE和WM_DESTROY消息:
流程圖展示瞭如何處理WM_CLOSE和WM_DESTROY消息