非模態對話方塊的建立及顯示

2021-06-27 12:16:22 字數 1964 閱讀 5952

非模態對話方塊顯示後,程式其他視窗仍能正常執行,可以響應使用者輸入,還可以相互切換

非模態對話方塊的對話方塊資源和對話方塊類

實際上,模態對話方塊和非模態對話方塊在建立對話方塊資源和生成對話方塊類上是沒有區別的,所以上一講中建立的idd_tip_dialog對話方塊資源和ctipdlg類都不需要修改。

建立及顯示非模態對話方塊的步驟

需要修改的是,對話方塊類例項的建立和顯示

,也就是之前在cadditiondlg::onbnclickedaddbutton()函式體中新增的對話方塊顯示**。下面是具體步驟:

1.在additiondlg.h中包含ctipdlg標頭檔案並定義ctipdlg型別的指標成員變數。詳細操作方法是,在additiondlg.cpp中刪除之前新增的#include "tipdlg.h",而在additiondlg.h中新增#include "tipdlg.h",這是因為我們需要在additiondlg.h中定義ctipdlg型別的指標變數,所以要先包含它的標頭檔案;然後在additiondlg.h中為cadditiondlg類新增private成員變數ctipdlg  *m_ptipdlg;。

2.在cadditiondlg類的建構函式中初始化成員變數m_ptipdlg。如果cpp檔案中函式太多,我們可以在class view上半個檢視中找到cadditiondlg類,再在下半個檢視中找到其建構函式雙擊,中間客戶區域即可馬上切到建構函式的實現處。在

建構函式體中新增m_ptipdlg = null;

,這是個好習慣,雞啄公尺在c++程式設計入門系列的

指標的賦值和指標運算

中說到過,在任何指標變數使用前都初始化,可以避免因誤訪問重要記憶體位址而破壞此位址的資料。

3.將上一講中新增的模態對話方塊顯示**注釋或刪除掉,新增非模態對話方塊的建立和顯示**

。vc++中注釋單行**使用「//」,注釋多行**可以在需注釋的**開始處新增「/*」,結束處新增「*/」。修改後的cadditiondlg::onbnclickedaddbutton()函式如下:

c++**

void

cadditiondlg::onbnclickedaddbutton()   

// 顯示非模態對話方塊 

m_ptipdlg->showwindow(sw_show);   

// 將各控制項中的資料儲存到相應的變數 

updatedata(true);   

// 將被加數和加數的加和賦值給m_editsum 

m_editsum = m_editsummand + m_editaddend;   

// 根據各變數的值更新相應的控制項。和的編輯框會顯示m_editsum的值 

updatedata(false);   

}  

4.因為此

非模態對話方塊例項是動態建立的,所以需要手動刪除此動態物件來銷毀對話方塊。我們在cadditiondlg類的析構函式中新增刪除**

,但是mfc並沒有自動給出析構函式,這時需要我們手動新增,在對話方塊物件析構時就會呼叫我們自定義的析構函式了。在additiondlg.h檔案中為cadditiondlg新增析構函式宣告:~cadditiondlg();,然後在additiondlg.cpp檔案中新增析構函式的實現,函式體如下:

c++**

cadditiondlg::~cadditiondlg()   

}  這樣,非模態對話方塊建立和顯示的**就新增修改完了。讓我們執行下看看效果吧。

在加法計算器對話方塊上輸入被加數和加數,然後點「計算」按鈕,依然像上節一樣彈出了提示對話方塊,但是先不要關閉它,你可以拖動它後面的加法計算器對話方塊試試,我們發現加法計算器對話方塊竟然可以拖動了,而且「和」編輯框裡已經顯示了運算結果,這表明提示對話方塊顯示以後還沒有關閉,onbnclickedaddbutton() 就繼續向下執行了,不僅如此,加法計算器的每個編輯框還都可以響應輸入。

模態對話方塊和非模態對話方塊的建立彈出

一 模態對話方塊的建立及顯示 1 windows對話方塊分為兩類 模態對話方塊和非模態對話方塊。模態對話方塊 當它彈出後,本應用程式其他視窗將不再接受使用者輸入,只有該對話方塊響應使用者輸入,在對它進行相應操作退出後,其他視窗才能繼續與使用者互動。非模態對話方塊 它彈出後,本程式其他視窗仍能響應使用...

模態對話方塊與非模態對話方塊

1.對話方塊分類 按工作方式不同,可將對話方塊分成兩類 模態對話方塊 modal 在關閉模態對話方塊之前,程式不能進行其他工作 如一般的 開啟檔案 對話方塊 非模態對話方塊 modeless 非模態對話方塊開啟後,程式仍然能夠進行其他工作 如一般的 查詢與替換 對話方塊 2.對話方塊建立 模態對話方...

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

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