1.簡述
1.1模態對話框(model dialog box)
當模態對話框顯示時,程序會暫停執行,直到關閉這個模態對話框之后,才能執行程序中的其他任務。
1.2非模態對話框(modeless dialog box)
當非模態對話框顯示時,運行轉而執行程序中的其他任務,而不用關閉這個對話框。
2.代碼
2.1模態對話框的實現
void CModelCtrDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知處理程序代碼 TestDialog1 dlg; dlg.DoModal(); }
TestDialog1是我創建的一個對話框相關的對話框類。
CDialog::DoModel:該函數的功能就是創建並顯示一個模態對話框。
2.2非模態對話框實現
void CModelCtrDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知處理程序代碼 TestDialog2 *dlg = new TestDialog2; dlg->Create(IDD_DIALOG2);//創建一個非模態對話框 IDD_DIALOG2是我創建的一對話框ID dlg->ShowWindow(SW_SHOWNORMAL);//顯示非模態對話框 }
上面程序因為dlg指針變量是在堆上存儲的, 且只有程序結束才能釋放, 如果要手動釋放的話要增加額外的代碼,因此這種寫法不太合適。
2.2.1改進代碼
首先在主對話框創建一個TestDialog2類型成員指針變量:
private: TestDialog2 *dlg;
再在相應的function加上以下代碼:
dlg = new TestDialog2; dlg->Create(IDD_DIALOG2);//創建一個非模態對話框 IDD_DIALOG2是我創建的一對話框ID dlg->ShowWindow(SW_SHOWNORMAL);//顯示非模態對話框
最后在主對話框類析構函數中加入
delete dlg;
