1、建立對話框對象編輯器
1.首先利用資源編輯器建立對話框資源,並針對該對話框資源定義一個對話框類:class CTestDlg : public CDialog函數
2.建立話話框對象this
模態對話框的建立:指針
如: CTestDlg dlg; dlg.DoModal();
非模態對話框建立:code
如:對象
CTestDlg dlg;生命週期
dlg.Create(IDD_DIALOG, this);資源
但這樣是得不到一個正常顯示的非模態對話框的。由於模態與非模態對話框的實現方式並不相同,這裏咱們還要注意幾點。it
非模態對話框建立完成後是隱藏着的,必須調用ShowWindow來進行顯示。 對於模態對話框,當執行到DoModal 函數以建立對話框時,程序會暫停執行,直至模態對話框關閉。因此建立模態對話框能夠採用局部對象。 可是,對於非模態對話框,當執行Create函數時並不會暫停執行,當執行到大括號"}後Dlg局部對象被銷燬生命週期結束,因而異常出現了。 解決方法有兩個: 1、在View類中定義一個CTestDlg 成員變量。 2、動態建立一個CTestDlg 變量,並重寫CTestDlg 類的 PostNcDestroy函數,在該函數裏銷燬對象 delete this; 不管建立的是模態對話框,仍是非模態對話框,當咱們單擊肯定或取消按鈕後對話框都會消失。但這時低層的操做倒是不一樣的。 對於模態對話框,此時對話框對象的確是被銷燬了,但對於非模態對話框,這時只是隱藏起來再也不顯示。這須要咱們本身調用DestoryWindow函數來進行銷燬工做。 這時咱們必須重寫 CTestDlg 的 OnOK 、 OnCancel 兩個函數(這兩個是基類CDialog的虛函數),在這兩個函數內調用DestroyWindow函數,並注意再也不調用基類CDialog相應的函數。class
正確地建立非模態對話框的代碼以下:
CTestDlg *pDlg = new CTestDlg;
pDlg->Create(IDD_DIALOG, this);
pDlg->ShowWindow(SW_SHOW);
銷燬非模態對話框及指針(網上不少資料,但試了以後關閉就打不開了),這裏介紹我總結的方法
一、CTestDlg *pDlg = new CTestDlg;能夠定義在頭文件.h中;
二、主對話框初始化OnInitDialog中需初始化 pDlg = NULL;
三、對話框的OnCancel()函數裏面使用DestroyWindow() 而且需delete this(這句話會調用對話框的析構函數);
四、在對話框的析構函數裏 清除 pDlg = NULL(這句能夠解決第二次打不開對話框的問題);