一.控件变量的分类
控件变量分为
值变量
和
控件类的变量;
①值变量:
与控件关联的数据变量,可以为任何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);