2.非模態對話框的創建

模態對話框和非模態對話框在創建對話框資源和生成對話框類上是沒有區別的,

所以上一講中創建的 IDD_TIP_DIALOG對話框資源和 CTipDlg 類都不需要修改。


STEP 1:

.AdditionDlg.h中包含CTipDlg頭文件並定義 CTipDlg 類型的指針成員變量。詳細

操作方法是,在AdditionDlg.cpp中刪除之前添加的#include "TipDlg.h",而在AdditionDlg.
h
中添加#include "TipDlg.h",這是因爲我們需要在AdditionDlg.h中定義CTipDlg類型的指
針變量,所以要先包含它的頭文件;然後在
AdditionDlg.h 中爲CAdditionDlg類添加privat
e
成員變量 CTipDlg *m_pTipDlg;

STEP2:

CAdditionDlg類的構造函數中初始化成員變量m_pTipDlg。如果cpp文件中函數
太多,我們可以在
Class View 上半個視圖中找到CAdditionDlg類,再在下半個視圖中找到
其構造函數雙擊,中間客戶區域即可馬上切到構造函數的實現處。在構造函數體中添加
m_
pTipDlg = NULL;

STEP3:

將上一講中添加的模態對話框顯示代碼註釋或刪除掉,添加非模態對話框的創建和顯
示代碼。 

void CAdditionDlg::OnBnClickedAddButton()
2. {
3. // TODO: Add your control notification handler code here
4. /*INT_PTR nRes; // 用於保存 DoModal 函數的返回值
5.
6. CTipDlg tipDlg; // 構造對話框類 CTipDlg 的實例
7. nRes = tipDlg.DoModal(); // 彈出對話框
8. if (IDCANCEL == nRes) // 判斷對話框退出後返回值是否爲 IDCANC
EL,如果是則 return,否則繼續向下執行
9. return;*/
10.
11. // 如果指針變量 m_pTipDlg 的值爲 NULL,則對話框還未創建,需要動態創建
12. if (NULL == m_pTipDlg)13. {
14. // 創建非模態對話框實例
15. m_pTipDlg = new CTipDlg();
16. m_pTipDlg->Create(IDD_TIP_DIALOG, this);
17. }
18. // 顯示非模態對話框
19. m_pTipDlg->ShowWindow(SW_SHOW);
20.
21. // 將各控件中的數據保存到相應的變量
22. UpdateData(TRUE);
23.
24. // 將被加數和加數的加和賦值給 m_editSum
25. m_editSum = m_editSummand + m_editAddend;
26.
27. // 根據各變量的值更新相應的控件。和的編輯框會顯示 m_editSum 的值
28. UpdateData(FALSE);
29. }

STEP4:

因爲此非模態對話框實例是動態創建的,所以需要手動刪除此動態對象來銷燬對話框。
我們在
CAdditionDlg 類的析構函數中添加刪除代碼,但是MFC並沒有自動給出析構函數,

 CAdditionDlg::~CAdditionDlg()
2. {
3. // 如果非模態對話框已經創建則刪除它
4. if (NULL != m_pTipDlg)
5. {
6. // 刪除非模態對話框對象
7. delete m_pTipDlg;
8. }
9. }


這時需要我們手動添加,在對話框對象析構時就會調用我們自定義的析構函數了。在 Addit
ionDlg.h
文件中爲 CAdditionDlg添加析構函數聲明:~CAdditionDlg();,然後在AdditionDl
g.cpp
文件中添加析構函數的實現,函數體如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章