WM_QUIT,WM_CLOSE,WM_DESTROY


     WM_DESTROY 是關閉程序
     WM_CLOSE 是關閉窗口
     WM_QUIT 是關閉消息環

     WM_CLOSEWM_DESTROY同屬窗口消息,WM_QUIT則不在窗口消息之列。三者先后執行順序是WM_CLOSEWM_DESTROY、WM_QUIT

   但需要注意的是MFC窗口默認取消按鈕函數OnCancel()是不會觸發WM_CLOSE消息只觸發WM_DESTROY

WM_CLOSE:

在系統菜單里選擇了“關閉”或者點擊了窗口右上角的“X”按鈕,你的窗口過程就會收到WM_CLOSEDefWindowProcWM_CLOSE的處理是調用DestroyWindow。當然,你可以不讓DefWindowProc處理,而是自己處理,例如詢問用戶是否保存更改等。如果用戶選擇“取消”,你忽略此消息,那么程序照常運行;如果用戶確認要退出,你就調用DestroyWindow

WM_DESTROY:

DestroyWindow完成窗口的清理工作,最后像窗口過程發送WM_DESTROY。對於WM_DESTROYDefWindowProc不會處理。也就是說,你如果不處理這個消息,雖然你的窗口已經銷毀,但進程並不會結束。一般處理WM_DESTROY時都是釋放資源(例如申請的內存等),然后調用PostQuitMessage

WM_QUIT:

PostQuitMessage會發送WM_QUIT給消息隊列。注意,WM_QUIT永遠不會到達窗口過程,因為GetMessage得到WM_QUIT后就會返回FALSE,從而結束消息循環,最后進程結束,程序退出。

 

假設使用者執行HELLOWIN.exe,並且使用者最終單擊了 Close按鈕,或者假設用鍵盤或鼠標從系統菜單中選擇了CloseDefWindowProc處理這一鍵盤或者鼠標輸入,在檢測到使用者選擇了Close選項之后,它給窗口消息處理程序發送一條WM_SYSCOMMAND消息。WndProc將這個消息傳給DefWindowProcDefWindowProc給窗口消息處理程序發送一條WM_CLOSE消息來響應之。WndProc再次將它傳給DefWindowProcDestroyWindow呼叫DestroyWindow來響應這條WM_CLOSE消息。DestroyWindow導致Windows給窗口消息處理程序發送一條WM_DESTROY消息。WndProc再呼叫PostQuitMessage,將一條WM_QUIT消息放入消息隊列中,以此來響應此消息。這個消息導致WinMain中的消息循環終止,然后程序結束。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM