加法計算器對話方塊程式大家照著做一遍後,相信對基於對話方塊的程式有些了解了,有個好的開始對於以後的學習大有裨益。趁熱打鐵,這一節講講什麼是模態對話方塊和非模態對話方塊,以及模態對話方塊怎樣彈出。
一.模態對話方塊和非模態對話方塊
windows對話方塊分為兩類:模態對話方塊和非模態對話方塊。
模態對話方塊是這樣的對話方塊,當它彈出後,本應用程式其他視窗將不再接受使用者輸入,只有該對話方塊響應使用者輸入,在對它進行相應操作退出後,其他視窗才能繼續與使用者互動。
非模態對話方塊則是,它彈出後,本程式其他視窗仍能響應使用者輸入。非模態對話方塊一般用來顯示提示資訊等。
大家對windows系統很了解,相信這兩種對話方塊應該都遇到過。之前的加法計算器對話方塊其實就是模態對話方塊。
二.模態對話方塊是怎樣彈出的
畢竟加法計算器程式大部分都是mfc自動生成的,對話方塊怎麼彈出來的大家可能還不是很清楚。雞啄公尺下面簡單說說它是在**彈出來的,再重新建乙個新的對話方塊並彈出它,這樣大家實踐以後就能更靈活的使用模態對話方塊了。
initinstance()函式的後半部分有一段**就是定義對話方塊物件並彈出對話方塊的,雞啄公尺下面給出這段**並加以注釋:
c++**
cadditiondlg dlg; // 定義對話方塊類cadditiondlg的物件dlg
m_pmainwnd = &dlg; // 將dlg設為主視窗
int_ptr nresponse = dlg.domodal(); // 彈出對話方塊dlg,並將domodal函式的返回值(退出時點選按鈕的id)賦值給nresponse
if (nresponse == idok) // 判斷返回值是否為ok按鈕(其id為idok,這裡已經將它刪除)
else if (nresponse == idcancel) // 判斷返回值是否為cancel按鈕(其id為idcancel,已經將它的caption改為了「退出」)
彈出對話方塊比較關鍵的乙個函式,就是對話方塊類的domodal()函式。cdialog::domodal()函式的原型為:
virtual int_ptr domodal();
返回值:整數值,指定了傳遞給cdialog::enddialog(該函式用於關閉對話方塊)的nresult引數值。如果函式不能建立對話方塊,則返回-1;如果出現其它錯誤,則返回idabort。
呼叫了它對話方塊就會彈出,返回值是退出對話方塊時所點的按鈕的id,比如,我們點了「退出」按鈕,那麼domodal返回值為idcancel。
三.新增乙個新對話方塊並彈出它
雞啄公尺再為加法計算器程式新增乙個對話方塊,以在計算之前詢問使用者是否確定要進行計算。大家可以完整的看下對話方塊的新增和彈出過程。
1.根據「建立對話方塊模板和修改對話方塊屬性」中所講的方法,在resource view中的「dialog」上點右鍵選擇「insert dialog」,建立乙個新的對話方塊模板,修改其id為idd_tip_dialog,caption改為「提示」,然後參考「為對話方塊新增控制項」中所講,在對話方塊模板上新增乙個靜態文字框(static text),caption改為「您確定要進行加法計算嗎?」,接下來修改ok按鈕的caption為「確定」,cancel按鈕的caption為「取消」,最後調整各個控制項的位置和對話方塊的大小。最終的對話方塊模板如下圖:
2.根據「建立對話方塊類和新增控制項變數」中建立對話方塊類的方法,在對話方塊模板上點右鍵選擇「add class...」,彈出新增類的對話方塊,設定「class name」為ctipdlg,點「ok」。在solution explorer中可以看到生成了ctipdlg類的標頭檔案tipdlg.h和原始檔tipdlg.cpp。
3.我們要在點「計算」按鈕之後彈出此提示對話方塊,那麼就要在「計算」按鈕的訊息處理函式onbnclickedaddbutton()中訪問提示對話方塊類,所以為了訪問ctipdlg類,在additiondlg.cpp中包含ctipdlg的標頭檔案:#include "tipdlg.h"。
4.修改onbnclickedaddbutton()的函式體,在所有**前,構造ctipdlg類的物件tipdlg,並通過語句tipdlg.domodal();彈出對話方塊,最後判斷domodal()函式的返回值是idok還是idcancel來確定是否繼續進行計算。onbnclickedaddbutton()函式修改後如下:
c++**
void cadditiondlg::onbnclickedaddbutton()
5.測試。編譯執行程式後,在對話方塊上輸入被加數和加數,點「計算」,彈出提示對話方塊詢問是否進行計算,如果選擇「確定」,則提示對話方塊退出,並在主對話方塊上顯示被加數和加數的和,而如果選擇「取消」,則提示對話方塊也會退出,但主對話方塊顯示的和不變,即沒有進行加法計算。
VS2010 MFC 使用模態對話方塊和非模態對話方塊
建立對話方塊之前需要準備好對話方塊資源,並為該對話方塊生成相應的類。比如新建對話方塊資源idd dialog1以及對話方塊類ctips。使用模態對話方塊 在當前呼叫該對話方塊的.cpp中 include tips.h ctips tipsdlg int prr nresponse ipsdlg.do...
VS2010 MFC(對話方塊 訊息對話方塊)
前面幾節講了屬性頁對話方塊,我們可以根據所講內容方便的建立自己的屬性頁對話方塊。本節講解windows系統中最常用最簡單的一類對話方塊 訊息對話方塊。我們在使用windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發中經常用到訊息對話方塊,所以mfc提供了兩個...
非模態對話方塊 MFC
cvolsetdlg m pvoldlg null m pvoldlg newcvolsetdlg m pvoldlg create idd dlg vol m pvoldlg showwindow sw show 過載oncancel函式 void cxx oncancel todo add yo...