無模式對話方塊與有模式對話方塊不同的是在建立後其他視窗都可以繼續接收使用者輸入,因此無模式對話方塊有些類似乙個彈出視窗。建立無模式對話方塊需要呼叫
bool cdialog::create( uint nidtemplate, cwnd* pparentwnd = null );然後再呼叫
bool cdialog::showwindow( sw_show);進行顯示,否則無模式對話方塊將是不可見的。相關**如下:
void cview::onopendlg(void)
在上面的**中我們新生成了乙個對話方塊物件,而且在退出函式時並沒有銷毀該物件。因為如果此時銷毀該物件(物件被銷毀時視窗同時被銷毀),而此時對話方塊還在顯示就會出現錯誤。所以我們可以在對話方塊退出時銷毀自己:在對話方塊中過載onok與oncancel在函式中呼叫父類的同名函式,然後呼叫destroywindow()強制銷毀視窗,在訊息處理函式中呼叫delete this; 強行刪除自身物件。相關**如下:
void ctestdlg1::onok()
cdialog::onok();
destroywindow();
void ctestdlg1::oncancel()
cdialog::oncancel();
destroywindow();
void ctestdlg1::ondestroy()
cdialog::ondestroy();
afxmessagebox("call delete this");
delete this;
這種方法的要點是在視窗被銷毀的時候,刪除自身物件。所以你可以在任何時候呼叫destroywindow()以達到徹底銷毀自身物件的作用。(destroywindow()的呼叫會引起ondestroy()的呼叫)
對於模式對話方塊只需要呼叫domodal();即可,而且在退出對話方塊時自動銷毀該物件:
void cview::onopendlg(void)
模式對話方塊與無模式對話方塊
顯示子窗體 1 showdialog 無模式對話方塊 babywindow.showdialog 顯示子窗體 showdialog 無模式對話方塊 無模式 窗體讓您在此窗體與另一窗體之間變換焦點,而不必關閉初始窗體。使用者在該窗體顯示的同時可繼續在任何應用程式的其他位置工作。例如 文字編輯軟體裡面的...
模式對話方塊 無模式對話方塊 的區別
開啟乙個模式對話方塊後,其他所有對話方塊都不能用滑鼠和鍵盤操作 非模對話方塊開啟後,它下面的對話方塊還能操作。僅此而已!應用的時候,如果希望多個對話方塊能同時操作,就用非模態的,大多情況下是模態的,好控制!無模式總結 建立時用create,清除時用destroywindow,建立物件時用new,清除...
運用無模式對話方塊
windows對話方塊分為模式 mode 和無模式 modeless 兩種。通常當螢幕最前面為模式對話方塊時,後面的對話方塊均不可用,這也是模式與無模式對話方塊的區別。最直接的創造無模式對話方塊的方法是呼叫create 函式,該函式需要傳遞乙個對話方塊模版資源以及可選的父視窗指標。如果不傳遞父視窗指...