• mfc入门基础(六)创建模态对话框与非模态对话框


    参考博客:

    VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)-软件开发-鸡啄米

    一、创建模态对话框

    1、接着上节中的test02的例子来讲,找到test02.cpp文件,找到函数InitInstance()

    然后,因为上节我们实现了个计算的例子,所以这边就看这个计算例子里自动生成的代码,

    如下:

    1. Ctest02Dlg dlg; // 定义对话框类Ctest02Dlg的对象dlg
    2. m_pMainWnd = &dlg; // 将dlg设为主窗口
    3. INT_PTR nResponse = dlg.DoModal(); // 弹出对话框dlg,并将DoModal函数的返回值(退出时点击按钮的ID)赋值给nResponse
    4. if (nResponse == IDOK)
    5. {
    6. // TODO: 在此放置处理何时用
    7. // “确定”来关闭对话框的代码
    8. }
    9. else if (nResponse == IDCANCEL)
    10. {
    11. // TODO: 在此放置处理何时用
    12. // “取消”来关闭对话框的代码
    13. }

    2、自定义创建个新的模态对话框界面,实现步骤如下:先进行资源视图找到Dialog,然后插入新的对话框,如下:

     3、修改对话框的名字和ID,如下:

     4、添加个静态文本,添加效果如下:,更改下Caption

    5、选择对话框模板,右键点击,选择添加类,设置类名CTipDlg如下:在解决方案中可以看到,

    生成了CTipDlg类的头文件TipDlg.h和源文件TipDlg.cpp

     

     6、开始引入头文件,如下:

     7、在OnBnClickedAddButton()函数中进行添加,里面给加数和被加数进行赋值的部位,我就直接跳过了,因为上节有讲,mfc入门基础(四)对话框添加控件、创建对话框类和为对话框控件添加变量_Littlehero_121的博客-CSDN博客

    1. void Ctest02Dlg::OnBnClickedAddButton()
    2. {
    3. // TODO: 在此添加控件通知处理程序代码
    4. INT_PTR nRes; // 用于保存DoModal函数的返回值
    5. CTipDlg tipDlg; // 构造对话框类CTipDlg的实例
    6. nRes = tipDlg.DoModal(); // 弹出对话框
    7. if (IDCANCEL == nRes) // 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行
    8. return;
    9. // 将各控件中的数据保存到相应的变量
    10. UpdateData(TRUE);
    11. // 将被加数和加数的加和赋值给m_editSum
    12. m_editSum = m_editSummand + m_editAddend;
    13. // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值
    14. UpdateData(FALSE);
    15. }

    最终实现效果如下:

     二、非模态对话框,实现效果如下:

    1、找到test02Dlg.h文件,然后进行创建个指针对象,构造函数中进行赋值,实现效果如下:

     

     2、删除掉原先:void Ctest02Dlg::OnBnClickedAddButton()中的值,重新输入代码如下:

    1. // TODO: 在此添加控件通知处理程序代码
    2. // 如果指针变量m_pTipDlg的值为NULL,则对话框还未创建,需要动态创建
    3. if (NULL == m_pTipDlg)
    4. {
    5. // 创建非模态对话框实例
    6. m_pTipDlg = new CTipDlg();
    7. m_pTipDlg->Create(IDD_TIP_DIALOG, this);
    8. }
    9. // 显示非模态对话框
    10. m_pTipDlg->ShowWindow(SW_SHOW);
    11. // 将各控件中的数据保存到相应的变量
    12. UpdateData(TRUE); //此处的TRUE可加可不加,因为默认是TRUE
    13. // 将被加数和加数的加和赋值给m_editSum
    14. m_editSum = m_editSummand + m_editAddend;
    15. // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值
    16. UpdateData(FALSE);

    3、因为非模态对话框实例是动态创建的,所以需要手动删除此动态对象来销毁对话框,MFC中不会自动添加析构函数,所以这边需要自己手动创建个,析构函数声明:~Ctest02Dlg();

    1. Ctest02Dlg::~Ctest02Dlg()
    2. {
    3. // 如果非模态对话框已经创建则删除它
    4. if (NULL != m_pTipDlg)
    5. {
    6. // 删除非模态对话框对象
    7. delete m_pTipDlg;
    8. }
    9. }

    4、最终实现效果如下:(标注的对话框可以进行拖动的)

     

  • 相关阅读:
    电子器件系列57:肖特基二极管(BAS7005)
    C/C++ Qt 标准Dialog对话框组件应用
    信息学奥赛一本通2062:【例1.3】电影票
    【反射】Field类
    算法-二叉树-简单-二叉树的最大和最小深度
    Prometheus 监测 RocketMQ 最佳实践
    计算机网络——网络层(概念及IP地址划分)
    C++:C++编程语言学习之数学运算&运算符及其优先级的简介、案例应用之详细攻略
    十二、MySql的事务(下)
    浏览器输入url后回车展开过程
  • 原文地址:https://blog.csdn.net/Littlehero_121/article/details/127647157