1. 对话框里控件上的数据应该如何保存?
1) 一般需要在CDialog的派生类中定义一些数据成员用来保存控件中用户输入的数据;
2) 那么最大的问题就是如何让这些定义的数据成员和控件中的数据进行及时的交流——使用SetDlgItemText和GetDlgItemText两个函数即可:
i. 在OnInitDialog中使用SetDlgItemText将数据成员作为初始值来初始化控件,前提是要对数据成员先进行初始化;
ii. 在OnOK、OnCancel等退出按钮的处理函数中使用GetDlgItemText将控件中的数据回写到相应的数据成员中;
iii. 例如:SetDlgItemText(IDC_NAME, m_strName)、GetDlgItemText(IDC_NAME, m_strName);
!第一个参数是目标控件的ID,第二个是数据成员,用于和控件交换数据;
3) 以上交换数据的缺陷:
i. 数据类型限制较大:只能交换字符串型的数据,有时候用数值类型保存更加方便;
ii. 数据正确与否无法检验:用户输入的数据是否合理(超出规定范围等)不能自动检验,如果数据多,则需要使用大量的语句进行校验,效率低下;
4) MFC给出的解决方案:在CDialog的虚函数DoDataExchange中使用DXX函数和DDV函数分别进行数据交换和数据校验即可,非常方便,无需在OnInitDialog和退出按钮函数中调用Set和Get函数,即可自动进行交换(数据的流动方向也可以自动判断)和校验;