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

2021-04-23 23:44:18 字數 1117 閱讀 2181

模態對話方塊和非模態對話方塊的區別

在這裡我就說的比較通俗易懂了,就是當你開啟乙個模態對話方塊時,你的焦點不能轉移到程式的其他視窗上,也就是你只能先響應模態對話方塊,才能進行成下面的操作。

而非模態對話方塊則相反,你可以不用管它,照常能夠將其他視窗啟用。

建立模態對話方塊,主要是應用對話方塊的domodal函式,如下:

cinputdlg *dlg=new cinputdlg("輸入引數","請輸入旋轉的角度:",this);

if(dlg->domodal()==idok)

else

如果你用下面的辦法建立模態對話方塊,那麼oninitialdialog函式裡面的程式將會出現將所有的對話方塊成員變數都變為空的錯誤。

//建立inputdlg的模態對話方塊

cinputdlg dlg=new cinputdlg("輸入引數","請輸入旋轉的角度:",this);

if(dlg.domodal()==idok)

else

那麼開啟的對話方塊如下:

也就是在建構函式中的cstring確實傳過去了,但是一到oninitialdialog裡面這些傳過去的值都會為空的。但是用指標型別的時候就不會出錯,因為用new建立乙個類的例項之後,返回的是乙個位址,也就是乙個指標型別的資料。

建立非模態對話方塊,需要用到對話方塊的兩個api函式:create和showwindow,如下:

cinputdlg* pdlg=new cinputdlg("輸入引數","請輸入旋轉的角度:",this);

pdlg->create(idd_dlg_inputdlg);

pdlg->showwindow(sw_show);

從上面的兩段程式可以看出,我過載cinputdlg的建構函式。這是你需要在過載建構函式的時候,先構造父類,也就是必須有下面的紅色字型部分。

cinputdlg::cinputdlg(cstring title,cstring promp,cwnd* pparent)

: cdialog(cinputdlg::idd, pparent)

就是說debug assertion failed!,而且是dlgcore.cpp的第497行出現了錯誤。但是只要你在建構函式後面新增上對父類的初始化,那麼就ok了,就可以彈出如下的視窗:

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

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

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

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

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

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