MFC模態與非模態對話框


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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM