DoDataExchange函数,UpdateData(TRUE)和UpdateData(FALSE)的区别
函数 区别 True false
2023-09-14 08:58:46 时间
MFC控件(暂时为Edit控件)与数据的绑定,变量值可以在界面和后台之间传递。
我们在DoDataExchange(CDataExchange*
pDX) 函数里,实现了MFC控件和变量的绑定。 若需要 编辑框控件 与 变量的绑定,则调用DDX函数:DDX_Text() ;若需要 复选框控件 与 变量 的绑定,则调用DDX函数:DDX_Check() 等。
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX,IDC_EDIT_A,Add.a);//需要自己根据实际情况添加。在新建工程下是没有这3条语句的 DDX_Text(pDX,IDC_EDIT_B,Add.b); DDX_Text(pDX,IDC_EDIT_C,Add.c); }
DoDataExchange函数其实是一项数据动态绑定技术。比如你在写动态按扭过程中须对按钮添加变量时,怎么添加?控件类已经写好了,其变量是已经固定的。你要添加新的变量就要用到DoDataExchange函数。
所以你要在对话框的构造函数里面初始化一个变量,再用DoDataExchange函数将它绑定到你的动态按扭中,比如:DDX_Check(pDX, IDC_CHECK1, m_Lesson1);这就是将m_Lesson1(这是一个外部变量,其定义在对话框的构造函数里)绑定到IDC_CHECK1中。
看下DDX_Check函数原型:void AFXAPI DDX_Check(CDataExchange* pDX, int nIDC, int& value);可以看到m_Lesson并不是真的添加到IDC_CHECK1控件里了,注意这是int& value,只是一个值引用而已。差不多的意思就是这个变量被框架传递给控件了。控件只负责使用此变量 ,而不负责改写此变量。
只有在MFC控件(暂时为Edit控件)与
变量 绑定 后,进行 UpdateData 才有意义。
1、UpdateData(TRUE)是将控件的状态传给其关联的变量,当然你要为控件关联上变量才行。
UpdateData(FALSE)是将控件的关联变量的值传给控件并改变控件状态。
UpdateData刷新的是当前对话框。
UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。
UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。
2、
UpdateData(TRUE)
——刷新控件的值到对应的变量。(外部输入值交给内部变量)
即:控件的值—>变量。
UpdateData(FALSE)
—— 拷贝变量值到控件显示。(变量的最终运算结果值交给外部输出显示)
即:变量值—>控件显示。
例如,窗口中用 DDX_Text(pDX, IDC_EDIT1, m_usercode);
将IDC_EDIT1编辑框控件与m_usercode变量做了关联,如果修改m_usercode之后要想对应控件显示更改,则需要调用UpdateData(FALSE);反之在IDC_EDIT1的oneditchanged()中需要加入UpdateData(TRUE);
简单地说,如果UpdateData(TRUE) == 将控件的值赋值给成员变量,即从窗口编辑框中读入数据;UpdateData(FALSE) == 将成员变量的值赋值给控件,将数据从窗口显示。
相关文章
- 用detours对C++类成员函数加钩子
- PHP判断变量是否存在及函数isset() 、empty()与is_null的区别
- 解密jQuery内核 DOM操作的核心函数domManip
- php中sprintf与printf函数用法区别
- 一天一个mysql函数(二) FIND_IN_SET()
- 让 Serverless 更普惠,阿里云函数计算 FC 宣布全面降价,最大幅度达 37.5%
- 鱼传科技:函数计算,只要用上就会觉得香
- 从云计算到函数计算
- [置顶] getenv、setenv函数(获取和设置系统环境变量) 与 环境变量
- 重走py 之路 ——普通操作与函数(三)
- 【Teradata SQL】dayofyear与td_day_of_year函数区别
- Python tkinter库之Canvas自定义直线函数画随机色彩圆盘
- 数学建模学习笔记(十四)神经网络——下:BP实战-非线性函数拟合
- golang函数和方法的区别
- MySQL COUNT函数优化及count(1)/count(*)/count(列名)的区别
- c++模板学习06之类模板与函数模板区别
- Atitit 函数式编程与命令式编程的区别attilax总结 qbf
- Angular Component template函数执行上下文的对象
- ML/DL之激活函数/求导函数:ML中常用的AF激活函数(step_function、sigmoid、softmax、ReLU等)&求导函数等代码实现之详细攻略
- AI:神经网络调参(数据、层数、batch大小,学习率+激活函数+正则化+分类/回归)并进行结果可视化
- 【数字信号处理】基本序列 ( 基本序列列举 | 单位脉冲序列 | 单位脉冲函数 | 离散单位脉冲函数 | 单位脉冲函数 与 离散单位脉冲函数的区别 )
- Python: dict setdault函数与collections.defaultdict()的区别
- vim插件的安装方式 -- vim注释插件和doxygen函数注释生成插件-ctrlp插件-tabular等号对齐 插件
- C语言使用技巧(三十一):回顾strlen函数简单使用
- 3.2.5.3 search()函数和match()函数区别
- peek函数的用法
- golang 函数作为参数传递(回调)
- C/C++之宏、内联函数和普通函数的区别
- 简述pytorch中squeeze函数和view函数的区别
- Oracle的学习心得和知识总结(三)|Oracle数据库重要函数详解 单行函数(一)(建议收藏 持续更新...)
- python内置函数__init__及__str__的区别