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

2021-05-27 18:19:17 字數 681 閱讀 8733

1. 對話方塊分類

按工作方式不同,可將對話方塊分成兩類:

模態對話方塊(modal):在關閉模態對話方塊之前,程式不能進行其他工作(如一般的「開啟檔案」對話方塊)

非模態對話方塊(modeless):非模態對話方塊開啟後,程式仍然能夠進行其他工作(如一般的「查詢與替換」對話方塊)

2. 對話方塊建立

模態對話方塊建立方法:呼叫cdialog的domodal()成員函式

非模態對話方塊建立方法:呼叫cdialog的create()成員函式,為了讓對話方塊顯示出來,還需要呼叫showwindow(sw_show) (cwnd的成員函式)。create函式不會啟動新的訊息迴圈,對話方塊與父視窗公用同乙個訊息迴圈。

domodal()在對話方塊被關閉後才返回,create在建立了對話方塊後就立即返回。

3. 對話方塊銷毀

模態對話方塊可以通過onok()或oncancel()或enddialog()函式來銷毀。(onok或oncancel中呼叫了enddialog)。

必須呼叫cwnd::destroywindow而不是cdialog::enddialog來關閉非模態對話方塊。destroywindow()僅僅是銷毀螢幕上的視窗而並沒刪除cwnd物件,因此我們需要在postncdestroy()中刪除cwnd物件。

void cmodelessdialog::postncdestroy

以上內容參考了:

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

建立對話方塊 case id dialog text dialogbox hinst,makeintresource idd textbox hwnd,textset break 建立模態對話方塊 case id dialog tcolor dhwnd createdialog hinst,make...

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

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

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

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