【MFC】 如何通過主對話方塊的按鈕響應建立非模態對話方塊
阿新 • • 發佈:2018-12-15
1.首先新建一個對話方塊IDD_DIALOG_Create, 並新增類CDialog_Create。 //在工程中會新生成一個Dialog_Create.h標頭檔案和一個Dialog_Create.CPP原始檔。
2.在主對話方塊的標頭檔案SerialDlg.h中包含剛新建的對話方塊的庫檔案(標頭檔案) #include"Dialog_Create.h"; //我們需要在SerialDlg.h中定義CDialog_Create型別的指標變數,所以要先包含它的標頭檔案;
3.在主對話方塊類的定義中新增私有成員變數: private: CDialogCreat* m_create; //定義CDialog_Create型別的指標變數,是指向類的指標。
4.在CSerialDlg類建構函式體中新增m_create = NULL; //在任何指標變數使用前都初始化,可以避免因誤訪問重要記憶體地址而破壞此地址的資料。
5.為按鈕新增訊息處理函式OnBnClickedAddButton()並新增如下程式碼:
if (NULL == m_create) // 如果指標變數m_create的值為NULL,則對話方塊還未建立,需要動態建立 { m_create = new CDialog_Create(); //動態建立物件 m_create->Create(IDD_DIALOG_Create, this); } m_create->ShowWindow(SW_SHOW); // 顯示非模態對話方塊 m_create->SetWindowPos(NULL, 800, 250, 0, 0, SWP_NOSIZE); //SWP_NOSIZE保持當前對話方塊大小(第4、5引數cx和cy會被忽略)設定非模態對話方塊的位置
6.因為此非模態對話方塊是動態建立的,所以需要手動刪除此動態物件來銷燬對話方塊。我們在CSerialDlg類的解構函式中新增銷燬對話方塊的程式碼。 在SerialDlg.h檔案中為CSerialDlg類新增解構函式宣告:~CSerialDlg(); 然後在CSerialDlg.cpp檔案中新增解構函式的實現,函式體如下:
CSerialDlg::~CSerialDlg() { // 如果非模態對話方塊已經建立則刪除它 if (NULL != m_create) { // 刪除非模態對話方塊物件 delete m_create; m_create = NULL; } }