從模態對話方塊和非模態對話方塊理解MFC

2021-06-21 07:52:57 字數 2089 閱讀 6554

1、非模態:

雖然引自網路,但是寫的很好,很清晰。

無模式對話方塊與有模式對話方塊不同的是在建立後其他視窗都可以繼續接收使用者輸入,因此無模式對話方塊有些類似乙個彈出視窗。建立

無模式對話方塊需要呼叫

bool cdialog::create( uint nidtemplate, cwnd* pparentwnd = null );之後還需要呼叫

bool cdialog::showwindow( sw_show);進行顯示,否則

無模式對話方塊將是不可見的。相關**如下:

void cyourview::onopendlg(void)

在上面的**中我們新生成了乙個對話方塊物件,而且在退出函式時並沒有銷毀該物件。因為如果此時銷毀該物件(物件被銷毀時視窗同時被銷毀),而此時對話方塊還在顯示就會出現錯誤。那麼這就提出了乙個問題:什麼時候銷毀該物件。我時常使用的方法有兩個:

在對話方塊退出時銷毀自己:在對話方塊中

過載onok與oncancel在函式中呼叫父類的同名函式,然後呼叫destroywindow()強制銷毀視窗,在對話方塊中對映wm_destroy訊息,在訊息處理函式中呼叫delete this;強行刪除自身物件。相關**如下:

void ctestdlg1::onok()

void ctestdlg1::oncancel()

void ctestdlg1::ondestroy()

這種方法的要點是在視窗被銷毀的時候,刪除自身物件。所以你可以在任何時候呼叫destroywindow()以達到徹底銷毀自身物件的作用。(destroywindow()的呼叫會引起ondestroy()的呼叫)

通過向父親視窗傳送訊息,要求其他視窗對其進行銷毀:首先需要定義乙個訊息用於進行通知,然後在對話方塊中對映wm_destroy訊息,在訊息處理函式中呼叫訊息傳送函式通知其他視窗。在接收訊息的視窗中利用on_message對映處理訊息的函式,並在訊息處理函式中刪除對話方塊物件。相關**如下:

/*更改對話方塊的有關檔案*/

ctestdlg2::ctestdlg2(cwnd* pparent /*=null*/)

: cdialog(ctestdlg2::idd, pparent)

}afx_data_init

}void ctestdlg2::onok()

void ctestdlg2::oncancel()

void ctestdlg2::ondestroy()

/*在訊息接收視窗中新增訊息對映*/

/*在標頭檔案中新增函式定義*/

afx_msg long ondeldlgmsg(wparam wp,lparam lp);

/*新增訊息對映***/

on_message(wm_delete_dlg,ondeldlgmsg)

end_message_map()

/*實現訊息處理函式*/

long cmy53_s1view::ondeldlgmsg(wparam wp,lparam lp)

/*建立對話方塊*/

void cmy53_s1view::ontest2()

在這種方法中我們利用訊息來進行通知,在window系統中利用訊息進行通知和傳遞資料的用法是很多的。

同樣 無模式對話方塊的另乙個作用還可以用來在使用者在對話方塊中的輸入改變時可以及時的反映到其他視窗。下面的**演示了在對話方塊中輸入一段文字,然後將其更新到檢視的顯示區域中,這同樣也是利用了訊息進行通知和資料傳遞。

/*在對話方塊中取出資料,並向其他視窗傳送訊息和資料,將資料

指標作為乙個引數傳送*/

void ctestdlg2::oncommbtn()

/*在訊息接收視窗中*/

/*對映訊息處理函式*/

on_message(wm_dlg_notify,ondlgnotifymsg)

/*在檢視中繪製出字串 m_szout*/

void cmy53_s1view::ondraw(cdc* pdc)

/*處理通知訊息,儲存資訊並更新顯示*/

long cmy53_s1view::ondlgnotifymsg(wparam wp,lparam lp)

此外這種用法利用訊息傳遞資料的方法對有

模式對話方塊和其他的視窗間

通訊也一樣有效

模態對話方塊和非模態對話方塊

模態對話方塊和非模態對話方塊的區別 在這裡我就說的比較通俗易懂了,就是當你開啟乙個模態對話方塊時,你的焦點不能轉移到程式的其他視窗上,也就是你只能先響應模態對話方塊,才能進行成下面的操作。而非模態對話方塊則相反,你可以不用管它,照常能夠將其他視窗啟用。建立模態對話方塊,主要是應用對話方塊的domod...

模態對話方塊和非模態對話方塊

模態對話方塊 關閉才能返回,非模態 不關閉就能返回 在資源裡新建立二個對話方塊 為新的對話方塊建立乙個類 在最原始的對話方塊函式的標頭檔案將上述兩個新新增的標頭檔案加進去,對模態按鈕進行程式設計 void cdemo11dlg onbnclickedbutton1 對非模態按鈕進行程式設計 void...

模態對話方塊和非模態對話方塊

模態對話方塊 modal dialogue box 是指在使用者想要對對話方塊以外的應用程式進行操作時,必須首先對該對話方塊進行響應。如單擊 確定 或者 取消 按鈕等將該對話方塊關閉,它和非模態對話方塊都是永遠置頂的,它們的區別在於當對話方塊開啟時,是否允許使用者進行其他物件的操作。開啟模態對話方塊...