VC MFC非模態對話方塊的實現方法

2022-09-26 21:57:14 字數 1662 閱讀 1357

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

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

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

nseitevqtk需要修改的是,對話方塊類例項的建立和顯示,也就是之前在cadditiondlg::onbnclickedaddbutton()函式體中新增的對話方塊顯示**。下面是nseitevqtk具體步驟:

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;,這是個好習慣,在任何指標變數使用前都初始化,可以避免因誤訪問重要記憶體位址而 破壞此位址的資料。

3.新增非模態對話方塊的建立和顯示代 碼。vc++中注釋單行**使用「//」,注釋多行**可以在需注釋的**開始處新增「/*」,結束處新增「*/」。修改後的 cadditiondlg::onbnclickedaddbutton()

函式如下:

void cadditiondlg::onbnclickedaddbutton()

// 顯示非模態對話方塊

m_ptipdlg->showwindow(sw_show)www.cppcns.com;

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

updatedata(true);

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

m_editsum = m_editsummand + m_editaddend;

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

updatedata(false);

}4.因為此非模態對話方塊例項是動態建立的,所以需要手動刪除此動態物件來銷毀對話方塊。我們在 cadditiondlg類的析構函式中新增刪除**,但是mfc並沒有自動給出析構函式,這時需要我們手動新增,在對話方塊物件析構時就會呼叫我們自定義 的析構函式了。在additiondlg.**件中為cadditiondlg新增析構函式宣告:~cadditiondlg();,然後在 additiondlg.cpp檔案中新增析構函式的實現,函式體如下:

cadditiwww.cppcns.comondlg::~cadditiondlg()

}這樣,非模態對話方塊建立和顯示的**就新增修改完了。

這只是乙個簡單的例子,到這裡相信大家對於對話方塊的使用更上了乙個台階了,可以在不同的情況下可以選擇使用模態對話方塊和非模態對話方塊了。

本文標題: vc mfc非模態對話方塊的實現方法

本文位址: /ruanjian/c/110924.html

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

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

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

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

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

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