1. 程式人生 > >【MFC】 如何通過主對話方塊的按鈕響應建立非模態對話方塊

【MFC】 如何通過主對話方塊的按鈕響應建立非模態對話方塊

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;
	   }   
 }