乙個關於建立非模態對話方塊的問題

2022-09-02 07:15:08 字數 828 閱讀 7169

首先要把cd2 dlg;寫成全域性,因為button這個函式是一次性執行,執行完cd2 dlg這個資源就銷毀了,導致點選以對話方塊一閃而過,可以寫在cpp的include的下面

其次if(!dlg.m_hwnd) 的情況下才dlg.create(idd_dialog2,this);

否則第一次可以正常彈出,第二次點的時候必然報錯,因為不能重複create

不需要dlg.detach();

據我所知這個函式用來切斷物件和視窗的關係,所以,不合適吧

總結下**應該是這樣的

cd2 dlg;放全域性

if(!dlg.m_hwnd)

dlg.showwindow(sw_show);

另外再囉嗦幾句,非模態跟模態有這很大的區別,模態對話方塊的話dlg.domodal();執行到這裡主對話方塊會停下,執行彈出對話方塊,直到彈出的對話方塊結束,主對話方塊再繼續,所以模態對話方塊的物件不需要全域性,放在按鈕相應函式裡就可以了,另外麵加dlg.detach();也可以,只是沒必要,它自己就會執行

但是非模態對話方塊就不一樣了,走到dlg.showwindow(sw_show);這裡彈出對話方塊的同時主對話方塊也繼續執行,面跟著dlg.detach();的話就直接非法操作。而如果dlg.showwindow(sw_show);面沒跟任何語句,那麼這個按鈕訊息執行完,釋放物件,這就是為什麼不能在按鈕函式裡面區域性定義物件

模態對話方塊和非模態對話方塊的建立彈出

一 模態對話方塊的建立及顯示 1 windows對話方塊分為兩類 模態對話方塊和非模態對話方塊。模態對話方塊 當它彈出後,本應用程式其他視窗將不再接受使用者輸入,只有該對話方塊響應使用者輸入,在對它進行相應操作退出後,其他視窗才能繼續與使用者互動。非模態對話方塊 它彈出後,本程式其他視窗仍能響應使用...

Qt模態對話方塊與非模態對話方塊的問題

如果要設定為模態對話方塊,最簡單的就是使用exec 方法,示例 如下 mydialog mydlg mydlg.exec 也可以使用show 方法,示例 如下 mydialog mydlg mydlg.setmodal true 此句 設定模態,預設是false mydlg.show 如果要設定為非...

MFC建立模態對話方塊和非模態對話方塊

以下主對話方塊類為 maindlg 一 建立模態對話方塊 1.在資源檢視裡插入dialog,對新建的對話方塊進行更改屬性新增需要的控制項等操作。2.在新建的對話方塊中右鍵新增類,新增新的對話方塊類cmodeldlg。3.在maindlg.h中包含modeldlg的標頭檔案 include cmode...