2.非模态对话框的创建

来源:互联网 发布:淘宝网地板棉拖鞋 编辑:程序博客网 时间:2024/05/20 02:26
模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,

所以上一讲中创建的 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 here4. /*INT_PTR nRes; // 用于保存 DoModal 函数的返回值5.6. CTipDlg tipDlg; // 构造对话框类 CTipDlg 的实例7. nRes = tipDlg.DoModal(); // 弹出对话框8. if (IDCANCEL == nRes) // 判断对话框退出后返回值是否为 IDCANCEL,如果是则 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_editSum25. 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
文件中添加析构函数的实现,函数体如下:


0 0
原创粉丝点击