一、模態對話方塊的建立及顯示
1
、windows對話方塊分為兩類:模態對話方塊和非模態對話方塊。
模態對話方塊:當它彈出後,本應用程式其他視窗將不再接受使用者輸入,只有該對話方塊響應使用者輸入,在對它進行相應操作退出後,其他視窗才能繼續與使用者互動。
非模態對話方塊:它彈出後,本程式其他視窗仍能響應使用者輸入。非模態對話方塊一般用來顯示提示資訊等。
2、模態對話方塊的彈出
①建立乙個新的對話方塊模板。
②為建立的對話方塊新增類,在solution explorer中可以看到生成了ctipdlg類的標頭檔案tipdlg.h和原始檔tipdlg.cpp。
③為按鈕新增訊息處理函式onbnclickedaddbutton()。
④在additiondlg.cpp中包含ctipdlg的標頭檔案:#include "tipdlg.h"。
⑤在訊息處理函式onbnclickedaddbutton()的函式體中,構造ctipdlg類的物件tipdlg,並通過語句tipdlg.domodal();彈出對話方塊,最後判斷domodal()函式的返回值是idok還是idcancel來確定做何種處理。
1)如果僅僅是彈出:
cadditiondlg dlg;
dlg.domodal();
2)可以通過模態對話方塊domodal函式的返回值,判斷使用者選擇了「確定」還是「取消」。注意函式返回值的型別int_ptr
cselectdlg dlgload;
//int_ptrnresponse = dlg.domodal();
//if(nresponse == idok)
if(dlgload.domodal()==idok)
else
二
、非模態對話方塊的建立及顯示
①建立乙個新的對話方塊模板。
②為建立的對話方塊新增類,在solution explorer中可以看到生成了ctipdlg類的標頭檔案tipdlg.h和原始檔tipdlg.cpp。
③為按鈕新增訊息處理函式onbnclickedaddbutton()。
④在additiondlg.h中新增#include"tipdlg.h"。
這是因為我們需要在additiondlg.h中定義ctipdlg型別的指標變數,所以要先包含它的標頭檔案;
⑤然後在additiondlg.h中為cadditiondlg類新增private成員變數ctipdlg *m_ptipdlg。【類指標】
注意:以前的指標大都是 int *pt1等 int為一種型別。這裡ctipdlg為一種類,指向類的指標。
⑥在cadditiondlg
類建構函式體中新增
m_ptipdlg = null;
在任何指標變數使用前都初始化,可以避免因誤訪問重要記憶體位址而破壞此位址的資料。
⑦修改cadditiondlg::onbnclickedaddbutton()
函式如下:
1. //
如果指標變數
m_ptipdlg
的值為null
,則對話方塊還未建立,需要動態建立
2.if(null == m_ptipdlg)
3.
8. // 顯示非模態對話方塊
9. m_ptipdlg->showwindow(sw_show);
10.
⑧、.
因為此非模態對話方塊例項是動態建立的,所以需要手動刪除此動態物件來銷毀對話方塊。我們在
cadditiondlg
類的析構函式
中新增刪除**,但是
mfc並沒有自動給出析構函式,這時需要我們手動新增,在對話方塊物件析構時就會呼叫我們自定義的析構函式了。在
additiondlg.h
檔案中為
cadditiondlg
新增析構函式宣告:
~cadditiondlg();
,然後在
additiondlg.cpp
檔案中新增析構函式的實現,函式體如下:
1. cadditiondlg::~cadditiondlg()
2.
9. }
模態對話方塊和非模態對話方塊
模態對話方塊和非模態對話方塊的區別 在這裡我就說的比較通俗易懂了,就是當你開啟乙個模態對話方塊時,你的焦點不能轉移到程式的其他視窗上,也就是你只能先響應模態對話方塊,才能進行成下面的操作。而非模態對話方塊則相反,你可以不用管它,照常能夠將其他視窗啟用。建立模態對話方塊,主要是應用對話方塊的domod...
模態對話方塊和非模態對話方塊
模態對話方塊 關閉才能返回,非模態 不關閉就能返回 在資源裡新建立二個對話方塊 為新的對話方塊建立乙個類 在最原始的對話方塊函式的標頭檔案將上述兩個新新增的標頭檔案加進去,對模態按鈕進行程式設計 void cdemo11dlg onbnclickedbutton1 對非模態按鈕進行程式設計 void...
模態對話方塊和非模態對話方塊
模態對話方塊 modal dialogue box 是指在使用者想要對對話方塊以外的應用程式進行操作時,必須首先對該對話方塊進行響應。如單擊 確定 或者 取消 按鈕等將該對話方塊關閉,它和非模態對話方塊都是永遠置頂的,它們的區別在於當對話方塊開啟時,是否允許使用者進行其他物件的操作。開啟模態對話方塊...