1. 程式人生 > >MFC——模態對話方塊和非模態對話方塊

MFC——模態對話方塊和非模態對話方塊

一、模態對話方塊

如果你需要做一個模態對話方塊,簡單的說就是你點一個按鈕,彈出一個對話方塊,之後你只能在彈出的對話方塊上操作的這麼一個過程。實驗的過程很簡單,跟著我做吧。

下面開始模態對話方塊實驗

  1. 在資源檢視新建一個對話方塊資源,修改其ID為IDD_DIALOG1,這個就是即將要彈出來的對話方塊

  2. 在這個對話方塊模板上點右鍵選擇“Add Class…”,彈出新增類的對話方塊,設定“Class name”為CTestDlg,點“OK”。在Solution Explorer中可以看到生成了CTestDlg類的標頭檔案TestDlg.h和原始檔TestDlg.cpp

  3. 假設你想點選ID為IDC_BUTTON1的按鈕後彈出上面建立的對話方塊,你就需要雙擊IDC_BUTTON1這個按鈕,在它的訊息相應函式中執行彈出的過程,下面是具體的方法。

  4. 因為你要訪問CTestDlg類,所以要在 工程Dlg.cpp 檔案中包含CTestDlg的標頭檔案:#include “TestDlg.h”

  5. 新增好標頭檔案後,修改IDC_BUTTON1的訊息響應函式,如下所示:

void CMFCApplication1Dlg::OnBnClickedButton1()
{
    // TODO:  在此新增控制元件通知處理程式程式碼
    INT_PTR nRes;             // 用於儲存DoModal函式的返回值   

    CTestDlg testDlg;           // 構造對話方塊類CTipDlg的例項   
    nRes = testDlg.DoModal();  // 彈出對話方塊   
    if (IDCANCEL == nRes)     // 判斷對話方塊退出後返回值是否為IDCANCEL,如果是則return,否則繼續向下執行   
        return;
}
  1. 編譯,點選那個button1,你就會發現彈出了你做的對話方塊

二、非模態對話方塊

如果你需要做一個非模態對話方塊,簡單的說就是你點一個按鈕,彈出一個對話方塊,之後你還能在原對話方塊上操作的這麼一個過程。實驗的過程也很簡單,跟著我做吧。

  1. 在資源檢視新建一個對話方塊資源,修改其ID為IDD_DIALOG1,這個就是即將要彈出來的對話方塊

  2. 在這個對話方塊模板上點右鍵選擇“Add Class…”,彈出新增類的對話方塊,設定“Class name”為CTestDlg,點“OK”。在Solution Explorer中可以看到生成了CTestDlg類的標頭檔案TestDlg.h和原始檔TestDlg.cpp

  3. 在AdditionDlg.h中新增#include “TestDlg.h”,這是因為我們需要在工程Dlg.h中定義CTestDlg型別的指標變數,所以要先包含它的標頭檔案;然後在 工程Dlg.h 中新增private成員變數CTestDlg *m_pTestDlg;

  4. 在CAdditionDlg類的建構函式中初始化成員變數m_pTestDlg。加入

m_pTestDlg = NULL;
  1. 修改button1的訊息響應函式,如下
void CMy2_MFCTempDlg::OnBnClickedButton1()
{
    // TODO:  在此新增控制元件通知處理程式程式碼
    if (NULL == m_pTestDlg)
    {
        // 建立非模態對話方塊例項   
        m_pTestDlg = new CTestDlg();
        m_pTestDlg->Create(IDD_DIALOG1, this);
    }
    // 顯示非模態對話方塊   
    m_pTestDlg->ShowWindow(SW_SHOW);
}
  1. 最後,在 工程Dlg.h檔案中為CAdditionDlg新增解構函式宣告:

~C工程Dlg();

然後在AdditionDlg.cpp檔案中新增解構函式的實現,函式體如下:

C工程Dlg::~C工程Dlg()
{
    // 如果非模態對話方塊已經建立則刪除它   
    if (NULL != m_pTestDlg)
    {
        // 刪除非模態對話方塊物件   
        delete m_pTestDlg;
    }
}

效果如下 在這裡插入圖片描述