在模態對話框中:
正常的用戶觸發的OnOK 、OnCancel消息都是通過調用函數EndDialog去關閉模態對話框的,EndDialog函數並不立即清除對話框。而是設置一個標志,並且允許對話框應用程序把控制權返回系統。系統在試圖從應用程序隊列檢索下一個消息之前檢測標志。如果已經設置了標志則系統中止消息循環,清除對話框,所以當我們想在代碼中去調用EndDialog函數去結束對話框,最后再釋放對話框對象。
函數原型:BOOL EndDialog(HWND hDlg,int nResult);
參數:
hDlg:表示要被清除的對話框窗口。
NResult:指定從創建對話框函數返回到應用程序的值。
返回值:如果函數調用成功,則返回值為非零值;如果函數調用失敗則返回值為零。若想獲得錯誤信息請調用GetLastError函數
EndDialog 與 DestroyWindow 的區別
(1) EndDialog(-1);
關閉模態對話框,並且將參數作為父對話框調用的返回值。
(2) DestroyWindow(); ::PostQuitMessage(0);
DestroyWindow 關閉非模態對話框。 退出消息循環,真正結束進程。有不少程序窗口關閉,但是不等於退出運行。CDialog::EndDialog
void EndDialog(int nResult);
參數:
nResult 對話框返回的值,用於調用者DoModal。
說明:
調用該成員函數來中止一個模態對話框。該函數返回nResult。無論模態對話框是何時被創建的,必須使用EndDialog來結束處理。
可以隨時調用EndDialog,即使在使用OnInitDialog時,即在對話框顯示或獲得輸入焦點之前就關閉它。
EndDialog不會立即關閉對話框。它設置了一個標記,用以指定在當前消息處理程序返回時就關閉對話框。
PS:今天遇到的問題:由於在模態對話框中調用了其他結束函數,沒有調用EndDialog函數終止消息循環,所以進程無法正常退出,被系統掛起。
參考鏈接:
https://blog.csdn.net/yangyihongyangjiying/java/article/details/44488343