天天看點

對話框1----建立模态對話框和非模态對話框

模态對話框是指當其顯示時,程式會暫停執行,直到關閉這個模态對話框後,才能繼續執行程式中其他任務。

非模态對話框顯示時,允許轉而執行程式中其他任務,而不用關閉這個對話框。

建立一個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指針所指向的記憶體。