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 ...
随机推荐
- mysql 禁制远程连接
改表法:把host地址改为% use mysql; update user set host = '%' where user = 'root'and host="127.0.0.1&quo ...
- 转:TCP/IP协议选项——TCP_KEEPALIVE .
[+] KEEPALIVE作用 KEEPALIVE代码示例 KEEPALIVE脚本设置 1.KEEPALIVE作用 KEEPALIVE机制,是TCP协议规定的TCP层(非应用层业务代码实现的)检测 ...
- easyui框架Date日期类型以json形式显示到前台datagrid时,显示为[object Object]
如下图,easyui当后台把时间数据返回转换成json然后加载在easyui的datagrid里面,显示为[object Object] 需要对时间格式添加格式的显示方法 /** * 时间格 ...
- Oracle常用函数脑图
全面的可参考(四)Oracle学习笔记—— 常见函数
- CSS样式中标点符号的作用
http://www.cnblogs.com/65876951/archive/2011/09/20/2182239.html
- iOS 获得通讯录中联系人的所有属性--b
ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...
- 导入项目出现: Unable to resolve target ‘android-10′ 解决办法
进入到android项目根目录下,打开项目文件project.properties ,修改 target=android-10 的值.把10改为当前虚拟机API level的版本即可.我这里改为17 ...
- AutoFac文档(转载)
目录 开始 注册组件 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 开始 程序集 如果你正在使用Nuget包管理器,你可以通过 ...
- Path相关方法解说(二)
今天咱们一起来看看Path里 XXXTo 相关的一类方法. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/4 ...
- JMeter学习笔记(四)
1. 断言 断言组件是通过获取服务器响应数据,然后根据断言规则去匹配这些响应数据:匹配到是正常现象,此时我们看不到任何提醒,如果匹配不到,即出现了异常情况,此时JMeter就会断定这个事务失败,那么我 ...