模态對話框是指當其顯示時,程式會暫停執行,直到關閉這個模态對話框後,才能繼續執行程式中其他任務。
非模态對話框顯示時,允許轉而執行程式中其他任務,而不用關閉這個對話框。
建立一個dialog對話框,其ID号為IDD_DIALOG1,為其添加一個新類CTestDlg,基類為CDialog。
在菜單欄總建立一個菜單按鈕,将Popup改為False,其ID号為IDM_DIALOG。
并為其添加一個COMMAND指令消息響應函數OnDialog建立在view中。
代碼
模态對話框
void CModalandModelnessView::OnDialog()
{
// TODO: 在此添加指令處理程式代碼
CTestDlg dlg;
dlg.DoModal();
}
非模态對話框
void CModalandModelnessView::OnDialog()
{
// TODO: 在此添加指令處理程式代碼
CTestDlg * pdlg = new CTestDlg;
pdlg ->Create(IDD_DIALOG,this);
pdlg -> ShowWindow(SW_SHOW);
}
注意,這種方法建立非模态對話框将會導緻記憶體洩露
有兩種方法可以解決
一是将這個指針變量定義為視類(view)的成員變量,然後在析構函數中調用delete來釋放這個指針變量所指向的那塊記憶體。
二是在CTsetDlg類中重載PostNcDestroy虛函數,釋放this指針所指向的記憶體。