1、當你按下了“關閉”按鈕或選取了“退出”菜單項之后,WM_CLOSE消息被發送給了應用程序的窗口處理過程函數。該函數對該消息的缺省處理僅為調用DestroyWindow()API函數,導致窗口被銷毀。
2、當窗口的客戶區被銷毀的時候WM_DESTROY消息被發給了應用程序的窗口處理過程。程序員可以在此釋放他自己分配的與窗口客戶區相關的資源,而窗口過程函數缺省的處理僅為調用PostQuitMessage()函數,這將導致WM_QUIT消息被送進應用程序的消息隊列。
3、隨后窗口的非客戶區(包括菜單欄、標題欄、狀態欄等)被銷毀,此時WM_NCDESTROY消息被發送給了應用程序的窗口過程。這個消息也是窗口過程處理的最后一個消息,程序員可以在這里釋放他自己分配的而一直沒有釋放的內存。使用了MFC創建的應用程序往往要在這個消息響應函數當中進行一些釋放內存和資源的工作。
4、而應用程序的消息檢測函數GetMessage()一旦檢索到WM_QUIT消息,就會返回False,從而結束消息循環,并且讓應用程序的WinMain()函數返回,從而結束應用程序。因此應用程序的窗口處理過程是不可能處理到這條WM_QUIT消息的。
5、綜上所述,如果我們是用SDK方法編寫應用程序而又不需要在程序結束的時候釋放用new及其他內存分配函數顯式分配的內存的話,我們完全可以直接通過向應用程序發送WM_QUIT消息讓程序退出。
6、如果我們利用了MFC創建應用程序則最好通過發送WM_CLOSE消息讓應用程序結束。因為MFC往往要在最后時刻進行一些清理工作。