非模態對話方塊的建立和刪除

2021-07-26 22:08:15 字數 2008 閱讀 8460

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.對話方塊建立 模態對話方...