你的第一個Windows程序——關閉窗口

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消息



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章