MFC学习笔记(四)- 模态对话框与非模态对话框的创建与显示
2018-02-28 12:02
337 查看
首先说一下两种对话框的区别:
1、从实现效果来说:模态对话框弹出后,主对话框不能进行下一步操作,必须等子对话框执行完毕;而非模态对话框弹出后仍不会影响主对话框的操作。
2、从实现原理来说:模态对话框是在主对话框的 .cpp 文件中,添加子对话框头文件,并在需要弹出对话框时实例化对象并显示;非模态对话框需要在主对话框的 .h 文件中,添加子对话框头文件,在主对话框的 .h 文件中添加 private 成员变量,类型为子对话框类指针,然后在需要弹出对话框时申请动态内存。
3、注意:因为非模态对话框的实现涉及到动态内存,所以切记在构造函数中初始化指针值为 “NULL”,在析构函数中 delete 指针变量。
示例:
1、我的对话框类(此处不再赘述关于类的添加等操作):
主对话框,添加类为”CChid_WindowDlg”
子对话框,添加类为”CRemind”
我会在主对话框点击“计算”之后弹出子对话框“提示”
2、代码实现:
- 模态对话框
非模态对话框
关于Updatedata()的用法
1、从实现效果来说:模态对话框弹出后,主对话框不能进行下一步操作,必须等子对话框执行完毕;而非模态对话框弹出后仍不会影响主对话框的操作。
2、从实现原理来说:模态对话框是在主对话框的 .cpp 文件中,添加子对话框头文件,并在需要弹出对话框时实例化对象并显示;非模态对话框需要在主对话框的 .h 文件中,添加子对话框头文件,在主对话框的 .h 文件中添加 private 成员变量,类型为子对话框类指针,然后在需要弹出对话框时申请动态内存。
3、注意:因为非模态对话框的实现涉及到动态内存,所以切记在构造函数中初始化指针值为 “NULL”,在析构函数中 delete 指针变量。
示例:
1、我的对话框类(此处不再赘述关于类的添加等操作):
主对话框,添加类为”CChid_WindowDlg”
子对话框,添加类为”CRemind”
我会在主对话框点击“计算”之后弹出子对话框“提示”
2、代码实现:
- 模态对话框
//CChild_WindowDlg.cpp #include "Remind.h" void CChild_WindowDlg::OnBnClickedOk() { CRemind m_remind; INT_PTR m_result = m_remind.DoModal(); //DoModal()函数用于显示对话框,返回值为关闭对话框点击控件的ID if (m_result == IDOK) //如果我退出子对话框点击了ID为"IDOK"的控件,就是子对话框中“确认”控件,则进行计算 { UpdateData(true); m_sum = m_left + m_right; UpdateData(false); } }
非模态对话框
//CChild_WindowDlg.h #include "Remind.h" class CChild_WindowDlg: public CDialogEx { //一大堆成员 private: CRemind * m_remind; };
//CChild_WindowDlg.cpp //构造函数中初始化 CChid_WindowDlg::CChild_WindowDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_CHID_WINDOW_DIALOG, pParent) , m_left(0) , m_right(0) , m_sum(0) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_remind = NULL; } //析构函数释放内存 CChid_WindowDlg::~CChild_WindowDlg() { if (m_remind != NULL) delete m_remind; } //具体实现 void CChild_WindowDlg::OnBnClickedOk() { if (m_remind == NULL) { m_remind = new CRemind; m_remind->Create(IDD_REMIND, this); //IDD_REMIND 是我的子对话框的ID } m_remind->ShowWindow(SW_SHOW); //显示子对话框 UpdateData(true); m_sum = m_left + m_right; UpdateData(false); }
关于Updatedata()的用法
相关文章推荐
- MFC学习笔记之:创建模态对话框和非模态对话框
- VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)
- VS2013/MFC编程入门之十一(对话框:非模态对话框的创建及显示)
- (转载)VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)
- VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)
- MFC学习笔记.day01续-调试MessageBox,注册窗口,创建窗口,显示,更新,消息循环,回调函数
- VS2010/MFC编程入门之十一(对话框:非模态对话框的创建及显示)
- MFC编程入门之十二(对话框:非模态对话框的创建及显示)
- VS2010/MFC对话框:非模态对话框的创建及显示
- MFC入门学习之控件(2)创建一个对话框窗口并在运行时显示
- MFC学习笔记(一):模态对话框与非模态对话框的区别、创建及显示
- MFC对话框学习笔记之模态对话框转化为非模态
- <MFC>模态对话框和非模态对话框的创建弹出
- 关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值
- MFC学习笔记——CDialog(模态对话框及其弹出过程)
- VS2010/MFC编程入门之十一(对话框:非模态对话框的创建及显示)
- C++ MFC / VS2013 之十(对话框:非模态对话框的创建及显示)
- VS2010 C++ MFC框架学习笔记3 - 控件Tab顺序设置及模态对话框
- MFC 模块对话框和非模态对话框的创建与释放
- VS2013MFC对话框工程学习笔记一 - 新建MFC对话框项目