VS2013/MFC编程入门之七(对话框:创建对话框类和添加控件变量)

MFC 专栏收录该内容
11 篇文章 1 订阅

前两讲中为大家讲解了如何创建对话框资源。创建好对话框资源后要做的就是生成对话框类了。再声明下,生成对话框类主要包括新建对话框类、添加控件变量和控件的消息处理函数等。

       因为给大家的例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的。大家用过VC++ 6.0的可能记得,我们定义的对话框类都是从CDialog类派生的,但在VS2013中,一般对话框类都是继承自CDialogEx类。

       创建对话框类

       如果是自己新添加的对话框模板,怎样为它创建对话框类呢?

       1.首先就按第六讲:创建对话框模板和修改对话框属性中说的那样,在资源视图的“Dialog”节点上右键,然后在右键菜单中选择“插入Dialog”创建一个新的对话框模板,ID就使用默认的IDD_DIALOG1。

       2.在中间区域会显示新建的对话框模板,然后选中此对话框模板,点右键,在右键菜单中选择添加类。

 

       3.选择“添加类”后会弹出一个对话框,在对话框中“类名”下的编辑框中写入自定义的类名就可以了,例如CMyDialog。

       4.最后点“Finish”完成。

       最终你就可以在Class View中看到新生成的对话框类CMyDialog了,并且在解决方案资源管理器中中有相应的MyDialog.h头文件和MyDialog.cpp源文件生成。CMyDialog类同样派生于CDialogEx类。

       注意,一般类名都以C打头,又比如,CTestDlg。

       为对话框中的控件添加变量

       在上一讲中为对话框添加了几个控件,包括三个静态文本框,三个编辑框,一个按钮控件。程序自动生成的Cancel按钮保留,作为退出按钮,而OK按钮删除掉了。

       静态文本框只是为了说明后面紧跟的编辑框中数据的意义,是被加数、加数还是和,所以它们是不会变的,我们就不为它们添加变量了。按钮控件是用来操作的,这里也不为它们添加变量。编辑框中的数据可能会经常变化,有必要为它们每个控件关联一个变量。

       首先为被加数的编辑框IDC_SUMMAND_EDIT添加变量。

       1.在编辑框上点右键,在右键菜单中选择“添加变量”。弹出添加成员变量的向导对话框。

       2.我们想为其添加值变量而不是控件变量,所以对话框中“类别”下的组合框中选择Value。

       3.“变量类型”下的组合框此时默认选中的是“CString”,CString是字符串类,显然不能进行加法运算。我们可以选择double、float、int等。这里我们选择double,即编辑框关联一个double类型的变量。

       4.在“变量名”中写入自定义的变量名。本文为其取名m_editSummand。


       5.点“Finish”完成。

       注意,类的成员变量名一般以m_打头,以标识它是一个成员变量。

       参照此方法,再分别为加数的编辑框IDD_ADDEND_EDIT添加double型变量m_editAddend、和的编辑框IDD_SUM_EDIT添加double型变量m_editSum。

       对话框类的数据交换和检验

       在程序运行界面中,用户往往会改变控件的属性,例如,在编辑框中输入字符串,或者改变组合框的选中项,又或者改变复选框的选中状态等。控件的属性改变后MFC会相应修改控件关联变量的值。这种同步的改变是通过MFC为对话框类自动生成的成员函数DoDataExchange()来实现的,这也叫做对话框的数据交换和检验机制。

       我们为三个编辑框添加了变量以后,在AdditionDlg.cpp中CAdditionDlg的DoDataExchange()函数的函数体中多了三条DDX_Text调用语句。下面是函数体代码和添加的注释。

C++代码
  1. void CAdditionDlg::DoDataExchange(CDataExchange* pDX)   
  2. {   
  3.     // 处理MFC默认的数据交换   
  4.     CDialogEx::DoDataExchange(pDX);   
  5.     // 处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换   
  6.     DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);   
  7.     // 处理控件IDC_ADDEND_EDIT和变量m_editAddend之间的数据交换   
  8.     DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);   
  9.     // 处理控件IDC_SUM_EDIT和变量m_editSum之间的数据交换   
  10.     DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);   
  11. }  

       再以Addition程序为例简单说下数据交换机制。如果我们在程序运行界面中输入被加数,则通过CAddition的DoDataExchange()函数可以将输入的值保存到m_editSummand变量中,反之如果程序运行中修改了变量m_editSummand的值,则通过CAddition的DoDataExchange()函数也可以将新的变量值显示到被加数的编辑框中。

       但是这种数据交换机制中,DoDataExchange()并不是被自动调用的,而是需要我们在程序中调用CDialogEx::UpdateData()函数,由UpdateData()函数再去自动调用DoDataExchange()的。

       CDialogEx::UpdateData()函数的原型为:

       BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

       参数:bSaveAndValidate用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给控件。默认值是TRUE,即从控件传给变量。

       返回值:CDialogEx::UpdateData()函数的返回值表示操作是否成功,成功则返回TRUE,否则返回FALSE。

       在下一讲中将具体演示CDialogEx::UpdateData()函数如何使用。

       本节主要讲的是新建对话框类和添加控件变量,控件的消息处理函数将在下一讲详细介绍。依然欢迎大家常回博客学习和讨论。

  • 0
    点赞
  • 1
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

VS2010-MFC编程入门之前言-软件开发-鸡啄米 VS2010-MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 VS2010-MFC编程入门之三(VS2010应用程序工程中文件的组成结构)鸡啄米 VS2010-MFC编程入门之四(MFC应用程序框架分析)-软件开发-鸡啄米 VS2010-MFC编程入门之五(MFC消息映射机制概述)-软件开发-鸡啄米 VS2010-MFC编程入门之六(对话框创建对话框模板修改对话框属性)鸡啄米 VS2010-MFC编程入门之七对话框:为对话框添加控件)-软件开发-鸡啄米 VS2010-MFC编程入门之八(对话框创建对话框添加控件变量VS2010-MFC编程入门之九(对话框:为控件添加消息处理函数)-软件开发-鸡啄米 VS2010-MFC编程入门之十(对话框:设置对话框控件的Tab顺序)-软件开发-鸡啄米 VS2010-MFC编程入门之十一(对话框:模态对话框及其弹出过程)-软件开发-鸡啄米 VS2010-MFC编程入门之十二(对话框:非模态对话框创建及显示)-软件开发-鸡啄米 VS2010-MFC编程入门之十三(对话框:属性页对话框及相关的介绍)-软件开发-鸡啄米 VS2010-MFC编程入门之十四(对话框:向导对话框创建及显示)-软件开发-鸡啄米 VS2010-MFC编程入门之十五(对话框:一般属性页对话框创建及显示)-软件开发-鸡啄米 VS2010-MFC编程入门之十六(对话框:消息对话框)-软件开发-鸡啄米 VS2010-MFC编程入门之十对话框:文件对话框)-软件开发-鸡啄米 VS2010-MFC编程入门之十八(对话框:字体对话框)-软件开发-鸡啄米 VS2010-MFC编程入门之十九(对话框:颜色对话框)-软件开发-鸡啄米 VS2010-MFC编程入门之二十(常用控件:静态文本框)-软件开发-鸡啄米 VS2010-MFC编程入门之二十一(常用控件:编辑框Edit Control)-软件开发-鸡啄米 VS2010-MFC编程入门之二十二(常用控件:按钮控件Button、Radio ButtonCheck Box)-软件开发-鸡啄米 VS2010-MFC编程入门之二十三(常用控件:按钮控件编程实例)-软件开发-鸡啄米 VS2010-MFC编程入门之二十四(常用控件:列表框控件ListBox)-软件开发-鸡啄米 VS2010-MFC编程入门之二十五(常用控件:组合框控件Combo Box)-软件开发-鸡啄米 VS2010-MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)-软件开发-鸡啄米 VS2010-MFC编程入门之二十(常用控件:图片控件Picture Control)-软件开发-鸡啄米 VS2010-MFC编程入门之二十八(常用控件:列表视图控件List Control 上)-软件开发-鸡啄米 VS2010-MFC编程入门之二十九(常用控件:列表视图控件List Control 下)-软件开发-鸡啄米 VS2010-MFC编程入门之三十(常用控件:树形控件Tree Control 上)-软件开发-鸡啄米 VS2010-MFC编程入门之三十一(常用控件:树形控件Tree Control 下)-软件开发-鸡啄米 VS2010-MFC编程入门之三十二(常用控件:标签控件Tab Control 上)-软件开发-鸡啄米 VS2010-MFC编程入门之三十三(常用控件:标签控件Tab Control 下)-软件开发-鸡啄米
一、VS2010/MFC编程入门教程之目录 第一部分:VS2010/MFC开发环境 VS2010/MFC编程入门之前言 VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解) 第二部分:VS2010/MFC应用程序框架 VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架) VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构) VS2010/MFC编程入门之四(MFC应用程序框架分析) VS2010/MFC编程入门之五(MFC消息映射机制概述) 第三部分:对话框 VS2010/MFC编程入门之六(对话框创建对话框模板修改对话框属性) VS2010/MFC编程入门之七对话框:为对话框添加控件VS2010/MFC编程入门之八(对话框创建对话框添加控件变量VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数) VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序) VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程) VS2010/MFC编程入门之十二(对话框:非模态对话框创建及显示) VS2010/MFC编程入门之十三(对话框:属性页对话框及相关的介绍) VS2010/MFC编程入门之十四(对话框:向导对话框创建及显示) VS2010/MFC编程入门之十五(对话框:一般属性页对话框创建及显示) VS2010/MFC编程入门之十六(对话框:消息对话框VS2010/MFC编程入门之十对话框:文件对话框VS2010/MFC编程入门之十八(对话框:字体对话框VS2010/MFC编程入门之十九(对话框:颜色对话框) 第四部分:常用控件 VS2010/MFC编程入门之二十(常用控件:静态文本框) VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control) VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio ButtonCheck Box) VS2010/MFC编程入门之二十三(常用控件:按钮控件编程实例) VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox) VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box) VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar) VS2010/MFC编程入门之二十(常用控件:图片控件Picture Control) VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上) VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下) VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上) VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下) VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上) VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下) 第五部分:菜单、工具栏与状态栏 VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解) VS2010/MFC编程入门之三十五(菜单:菜单及CMenu的使用) VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBarVS2010/MFC编程入门之三十(工具栏:工具栏的创建、停靠与使用) VS2010/MFC编程入门之三十八(状态栏的使用详解) 第六部分:文档、视图框架 VS2010/MFC编程入门之三十九(文档、视图框架:概述) VS2010/MFC编程入门之四十(文档、视图框架:各对象之间的关系) VS2010/MFC编程入门之四十一(文档、视图框架:分割窗口) 第部分:MF
©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值