以下是對(duì)話(huà)框關(guān)閉時(shí)發(fā)送的不同消息:
1)點(diǎn)擊OK按鈕:OnOk-WM_DESTROY
2) 點(diǎn)擊Cancel按鈕:OnCancel-WM_DESTROY
3) 點(diǎn)擊×按鈕:WM_CLOSE-ONCANCEL-WM_DESTROY
4) 鍵盤(pán)ESC按鍵:OnCancel-WM_DESTROY
5)調(diào)用EndDialog(IDCANCEL),直接到WM_DESTROY消息
這些方式都可以的,要是你的關(guān)閉沒(méi)有成功,那么一定是出現(xiàn)內(nèi)存泄漏,你需要在WM_DESTROY消息中釋放資源,應(yīng)為WM_DESTROY消息是所有銷(xiāo)毀方式都要發(fā)送的。
WM_CLOSE:
在系統(tǒng)菜單里選擇了“關(guān)閉”或者點(diǎn)擊了窗口右上角的“X”按鈕,你的窗口過(guò)程就會(huì)收到WM_CLOSE。DefWindowProc對(duì)WM_CLOSE的處理是調(diào)用DestroyWindow。當(dāng)然,你可以不讓DefWindowProc處理,而是自己處理,例如詢(xún)問(wèn)用戶(hù)是否保存更改等。如果用戶(hù)選擇“取消”,你忽略此消息,那么程序照常運(yùn)行;如果用戶(hù)確認(rèn)要退出,你就調(diào)用DestroyWindow。
WM_DESTROY:
接下來(lái),DestroyWindow完成窗口的清理工作,最后像窗口過(guò)程發(fā)送WM_DESTROY。對(duì)于WM_DESTROY,DefWindowProc不會(huì)處理。也就是說(shuō),你如果不處理這個(gè)消息,雖然你的窗口已經(jīng)銷(xiāo)毀,但進(jìn)程并不會(huì)結(jié)束。一般處理WM_DESTROY時(shí)都是釋放資源(例如申請(qǐng)的內(nèi)存等),然后調(diào)用PostQuitMessage。
WM_QUIT:
PostQuitMessage會(huì)發(fā)送WM_QUIT給消息隊(duì)列。注意,WM_QUIT永遠(yuǎn)不會(huì)到達(dá)窗口過(guò)程,因?yàn)镚etMessage得到WM_QUIT后就會(huì)返回FALSE,從而結(jié)束消息循環(huán),最后進(jìn)程結(jié)束,程序退出。
假設(shè)使用者執(zhí)行HELLOWIN,并且使用者最終單擊了 Close按鈕,或者假設(shè)用鍵盤(pán)或鼠標(biāo)從系統(tǒng)菜單中選擇了 Close, DefWindowProc處理這一鍵盤(pán)或者鼠標(biāo)輸入,在檢測(cè)到使用者選擇了Close選項(xiàng)之后,它給窗口消息處理程序發(fā)送一條WM_SYSCOMMAND消息。WndProc將這個(gè)消息傳給DefWindowProc。DefWindowProc給窗口消息處理程序發(fā)送一條WM_CLOSE消息來(lái)響應(yīng)之。WndProc再次將它傳給DefWindowProc。DestroyWindow呼叫DestroyWindow來(lái)響應(yīng)這條WM_CLOSE消息。DestroyWindow導(dǎo)致Windows給窗口消息處理程序發(fā)送一條WM_DESTROY消息。WndProc再呼叫PostQuitMessage,將一條WM_QUIT消息放入消息隊(duì)列中,以此來(lái)響應(yīng)此消息。這個(gè)消息導(dǎo)致WinMain中的消息循環(huán)終止,然后程序結(jié)束。
posted on 2009-03-11 22:46
水 閱讀(2560)
評(píng)論(1) 編輯 收藏 引用 所屬分類(lèi):
vc