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