1、模式對話方塊:
在模式對話方塊下,用cdialog::onok()或cdialog::oncancel()以及cdialog::onclose()關閉對話方塊。
一定要注意之前的cdialog::(當然,你可以過載你自己對話方塊的這個虛函式,但是,後面必須呼叫基類的cdialog::)具體我們再參照深入淺出的風格,來個解刨。
cdialog::close()預設呼叫cdialog::oncancel() , cdialog::oncancel()呼叫cdialog::enddialog(idcancel);
cdialog::enddialog呼叫cdialog::destroywindows(),cdialog::destroywindows呼叫cdialog::ondestroy() ;
cdialog::onok()預設先cdialog::updatedata(),然後再呼叫cdialog::enddialog(idok).
cdialog::enddialog呼叫cdialog::destroywindows(), cdialog::destroywindows呼叫cdialog::ondestroy()
看來上面你可能就知道了如下的等式
cdialog::close() == cdialog::oncancel() ==cdialog::enddialog(idcancel)一樣。
cdialog::onok() == cdialog::enddialog(idok).
而cdialog::enddialog(idok)跟cdialog::enddialog(idcancel)的區別就是,少了乙個cdialog::updatedata(),也就是cdialog::enddialog(idok),在關閉對話方塊後,會把對話方塊上控制項關聯的變數的值更新為使用者最後輸入的值。而cdialog::enddialog(idcancel)就不會更新這個值。
2、非模態對話方塊:
在非模式對話方塊,過載你自己的onok(),就是cmydialog::onok()呼叫cdialog::destroywindows()。注意:不是預設的cdialog::onok()來關閉對話方塊。
過載cmydialog::oncancel()呼叫cdialog::destroywindows()。注意:不是呼叫預設的cdialog::oncancel(),來關閉對話方塊。
聽起來很簡單,但是下面提到乙個很具體的程式設計問題。
一般,我們用非模態對話方塊都是全域性的,也就是通過new來建立,是在heap上的,而不是在stack上的。
這樣我們當然還要通過delete 來銷毀物件,不然可是有記憶體洩漏的。那麼我們什麼時候delete這個物件呢?
在msdn上面我們可以看到微軟提供的方法是,
我們要過載postncdestroy(),即我們要實現cmydialog::postncdestroy(),內容如下
cmydialog::postncdestroy()
具體操作**:
motustest *mmotustest;
mmotustest = new motustest();
mmotustest->create(idd_dlgtest, this);
mmotustest->showwindow(sw_show);
過載函式oncancel()和函式onok()
void motustest::onok()
void motustest::oncancel()
過載函式postncdestroy()
void motustest::postncdestroy()
函式enddialog()和destroywindow()的區別。
(1) enddialog(0);
關閉模態對話方塊,並且將引數作為父對話方塊呼叫的返回值。
(2) destroywindow();
destroywindow 關閉非模態對話方塊。 退出訊息迴圈,真正結束程序。有不少程式視窗關閉,但是不等於退出執行。
函式postncdestroy()
在視窗被銷毀以後,預設的onncdestroy成員函式呼叫這個函式。
非模態對話方塊的建立和銷毀過程
建立非模態對畫框的過程 見 乙個非模態的mfc視窗的銷毀過程 假設自己通過 new建立了乙個視窗物件 pwnd 然後pwnd create 則銷毀視窗的呼叫次序 1.手工呼叫 pwnd destroywindow 一般在對話方塊類中的 oncancle 函式中postmessage wm desto...
模態對話方塊和非模態對話方塊的建立彈出
一 模態對話方塊的建立及顯示 1 windows對話方塊分為兩類 模態對話方塊和非模態對話方塊。模態對話方塊 當它彈出後,本應用程式其他視窗將不再接受使用者輸入,只有該對話方塊響應使用者輸入,在對它進行相應操作退出後,其他視窗才能繼續與使用者互動。非模態對話方塊 它彈出後,本程式其他視窗仍能響應使用...
模態對話方塊與非模態對話方塊
1.對話方塊分類 按工作方式不同,可將對話方塊分成兩類 模態對話方塊 modal 在關閉模態對話方塊之前,程式不能進行其他工作 如一般的 開啟檔案 對話方塊 非模態對話方塊 modeless 非模態對話方塊開啟後,程式仍然能夠進行其他工作 如一般的 查詢與替換 對話方塊 2.對話方塊建立 模態對話方...