MFC中给控件添加变量,DoDataExchange中
DoDataExchange函数其实是一项数据动态绑定技术。比如你在写动态按钮过程中须对按钮添加变量时,怎么添加?控件类已经写好了,其变量是已经固定的。你要添加新的变量就要用到DoDataExchange函数。
CWnd::DoDataExchange https://msdn.microsoft.com/zh-cn/library/x4d0y489.aspx
调用由框架交换和验证对话框数据。
virtual void DoDataExchange(
CDataExchange* pDX
);
- pDX
-
为 CDataExchange 对象的指针。
不要直接调用此函数。 它由 UpdateData 成员函数调用。 调用 UpdateData 初始化对话框的控件或对话框中检索数据。
当从 CDialog派生时应用程序特定的对话框选件类,则需要重写该成员函数,如果您希望使用结构的自动数据交换和验证。 添加变量向导将编写该成员函数的重写版本包含预期“数据映射”对话框的数据交换(ddx),并验证(DDV)全局函数调用。
自动生成此成员函数的重写版本,请对话框编辑器首先创建对话框资源,然后派生应用程序特定的对话框选件类。 然后使用添加变量向导关联变量、数据和验证大小与在新的对话框的各种控件。 向导然后将被重写的 DoDataExchange,包含数据映射。 下面是示例DDX/DDV代码块生成由添加变量向导:
void CPenWidthsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_THINPENWIDTH, m_nThinWidth);
DDV_MinMaxInt(pDX, m_nThinWidth, 1, 20);
DDX_Text(pDX, IDC_THICKPENWIDTH, m_nThickWidth);
DDV_MinMaxInt(pDX, m_nThickWidth, 1, 20);
}
DoDataExchange 重写的成员函数必须在源文件中的宏语句。
有关数据交换的对话框和验证的更多信息,请参见 显示和操作数据窗体 和 数据交换的对话框和验证。 有关添加变量向导生成的DDX_和DDV_宏的说明,请参见 技术说明26。
要求
头文件位置: afxwin.h
VC中的DoDataExchange
怎么设置控件和变量关联呢?
假如在对话框中加入一个picture控件的话
1.导入图片
2.拉picture控件到对话框上,设置属性,Type改为Bitmap,image选择导入的图片,ID一定要修改,不能为默认的IDC_Static,否则下面将做的Classwizard将不出现此控件ID。
3.ClassWizard中选择member variable Category选择 Control加入相应的CStatic变量 。
4.此时到DoDataExchange看,增加相应的数据交换语句,我的是DDX_Control(pDX, IDC_bt, m_bt);
void CUserDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_USER_EDIT, m_username);
DDV_MaxChars(pDX,m_username,10); //将用户名的最大长度控件在10个字符
}
DDX:Dialog Data Exchange 表示对话框数据交换
DDV:Dialog Data Valid 表示对话框数据有效性
总之,这个函数对理解MFC框架是很有用的。对于写控件也是很有用的。
UpdataData函数内部调用了DoDataExchange。该函数只有一个布尔型参数,它决定了数据传送的方向。调用UpdateData(TRUE)将数据从对话框的控件中传送到对应的数据成员中,调用UpdateData(FALSE)则将数据从数据成员中传送给对应的控件。
UpdateData(FALSE)是将变量的值传到控件.
UpdateData(TRUE)是从控件中取值到关联的变量
UpdateData();//将控件的值传给变量
m_variable= "string";//分别为控件的变量赋值
UpdateData(FALSE);//将变量的值传给控件
MFC中给控件添加变量,DoDataExchange中的更多相关文章
- MFC 如何为控件关联变量
所关联的变量常见有两种,一种就是控件变量,一种就是数字变量. 为控件关联变量的方法也有两种,一种是通过软件工具添加,一种是手动添加代码. 软件工具添加,方便简单,但是根据软件的版本不同,以及不同的空间 ...
- mfc 控件添加变量
关联控件变量 初始化数据 一.关联控件变量 .为Edit控件关联数值类变量 变量名 m_edt1_s .为Edit控件关联控件类变量 变量名 m_edt1_ctl 二.控件变量的使用 HWND h=: ...
- MFC List Control 控件添加单元格编辑,实现可编辑重写
在实现随机生成四则运算的个人项目中,目前已经完成基本功能,想要把程序变成一个Windows界面的程序.原本以为学习过MFC,应该很快就能完成.但是由于以前用的都是VC6.0,这次用了VS2010,稍微 ...
- Xcode中给控件添加颜色时自动显示出颜色
在iOS开发中,给一些控件设置颜色的时候,设置完不能立马看到颜色.必须要运行程序之后才能看到设置的颜色,如果颜色有偏差再回代码改参数,然后再运行看颜色很是麻烦.令人高兴得是Xcode有很多功能强大插件 ...
- mfc 动态为控件添加事件2
重载窗口过程 为动态控件绑定事件 一.重载窗口过程处理函数 CWnd::WindowProc virtual LRESULT WindowProc( UINT message, WPARAM wPar ...
- mfc 动态为控件添加事件1
知识点: 认识窗口过程 GetWindowLong SetWindowLong 为动态控件绑定事件 一.获取窗口过程 二.设置新窗口过程 .书写一个新窗口过程函数 窗口过程格式 LRESULT CAL ...
- flex中为控件添加监听器并计算
1.添加监听器: public function moduleCreationComplete():void { this.D601_29a.addEventListener(FlexEvent.SE ...
- VS2008中为控件添加属性(比如前景色,背景色)
VS2008中没有classwizard,但不要伤心,到了VS2010,classwizard又回来了. 可以参照这篇博客:http://blog.csdn.net/candyliuxj/articl ...
- WCF中使用控件的委托,线程中的UI委托
UI界面: <Window x:Class="InheritDemo.Window1" xmlns="http://schemas.microsoft.com/wi ...
随机推荐
- git——分布式版本控制系统
Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 ...
- 携程实时大数据平台演进:1/3 Storm应用已迁到JStorm
携程大数据平台负责人张翼分享携程的实时大数据平台的迭代,按照时间线介绍采用的技术以及踩过的坑.携程最初基于稳定和成熟度选择了Storm+Kafka,解决了数据共享.资源控制.监控告警.依赖管理等问题之 ...
- css background-position结合disaply:inline-block使用
$(".icon-a").on('click', function (e) { if ($(this).next().css('display') == "none&qu ...
- cat /proc/iomem
在proc目录下有iomem和ioports文件,其主要描述了系统的io内存和io端口资源分布. 对于外设的访问,最终都是通过读写设备上的寄存器实现的,寄存器不外乎:控制寄存器.状态寄存器和数据寄存器 ...
- http跨域访问
if (Request.Headers.Get("Origin") != null) { filterContext.HttpContext.Response.AddHeader( ...
- Makefile生成器,使用C++和Boost实现
今天学习了一下Boost的文件遍历功能,同一时候发现GNU编译器有-MM选项.能够自己主动生成依赖关系,于是利用以上两点写了一个Makefile生成器. 能够生成一般的单个可运行文件的Makefile ...
- struts2 的国际化
一.使用步骤 1)写资源文件,资源文件名命名规范和之前的讲的一致,有疑问请参考java开发中国际化 2)配置,在 struts.xml 中使用常量进行加载 struts.custom.i18n.res ...
- java工程资源文件夹嵌套建立!
做过一遍忘了,找了半天!记这里,看你还忘不忘!
- tcpdump常用参数说明
(一).学习tcpdump的5个参数 初次使用tcpdump时,使用tcpdump -h命令可以看到它有数十个参数. 根据我们在运维工作中的经验,掌握tcpdump以下5个参数即可满足大部分的工作需要 ...
- js操作cookie的一些注意项
这两天做购物车逻辑.依照通常的做法,把预购信息存放在cookie里,结果发生了非常多不可理喻的事情,完整的证明了我对cookie的无知. . . 这么多年.非常少用cookie,由于认为它不安全 ...