一.控件变量的分类
控件变量分为值变量和控件类的变量;
①值变量:与控件关联的数据变量,可以为任何MFC基本数据类型,在控件和变量之间有两种数据的传递方式:控件传递给变量(表征为向控件输入数值改变与之关联的变量的值),和变量传递给控件(表征为刷新后控件中的数值发生变化)
②控件类的变量:控件类的对象,方便对控件本身进行操作,比如设置焦点,显示隐藏控件本身等,代替GetDlgItem()函数;
二.控件与其相关联的变量之间的值传递
1.传递方式
①控件传递给变量:
通过修改控件框中的数值,来改变与控件关联变量的数值;
②变量传递给控件:
通过修改变量的值来改变控件框的显示;
2.数据交换和检验
现在我们来思考当控件框值和与之关联的变量有一方发生改变时,是谁监测检验并执行数据的交换呢?在MFC中有这样两个函数
DoDataExchange(); //执行数据交换
UpdateData(); //监测检验
DoDataExchange()来执行数据的交换,这个函数是MFC自动生成的函数,只要有关联变量,MFC就会在次函数中自动添加关联语句;
void CAdditionDlg::DoDataExchange(CDataExchange* pDX)
{
// 处理MFC默认的数据交换
CDialogEx::DoDataExchange(pDX);
// 处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换
DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);
// 处理控件IDC_ADDEND_EDIT和变量m_editAddend之间的数据交换
DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);
// 处理控件IDC_SUM_EDIT和变量m_editSum之间的数据交换
DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);
}
但是这个函数并不会自动响应,需要人为的调用,就是说何时进行数据的交换,即使用UpdateData()函数进行调用DoDataExchange()函数的执行,
UpdateData()函数的原型为:BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
参数:bSaveAndValidate用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给控件。默认值是TRUE,即从控件传给变量。
例如:
void CAdditionDlg::OnBnClickedAddButton()
{
// 将各控件中的数据保存到相应的变量
UpdateData(TRUE);
// 将被加数和加数的加和赋值给m_editSum
m_editSum = m_editSummand + m_editAddend;
// 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值
UpdateData(FALSE);
}
三.关联变量生成的位置
将会在三处生成代码
1. 头文件 访问所选位置(这里是public) int iNumber;
2. 类初始化此变量
3.DoDataExchange 出生成相关代码
DDX_Text(pDX, IDC_EDIT4, iNumber);
DDV_MinMaxInt(pDX, iNumber, 0, 50);