惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
H
Heimdal Security Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
C
Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Hacker News
The Hacker News
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
S
Securelist
P
Privacy International News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
博客园 - 叶小钗
J
Java Code Geeks
V
V2EX
博客园 - Franky
Spread Privacy
Spread Privacy
K
Kaspersky official blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Simon Willison's Weblog
Simon Willison's Weblog
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
C
Cybersecurity and Infrastructure Security Agency CISA
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
NISL@THU
NISL@THU
罗磊的独立博客
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
V
Visual Studio Blog

博客园 - sopper

Visual Assist X设置 转 mac入门系列教程之二–-Mac与众不同(4) 转 mac入门系列教程之二–-Mac与众不同(3) 转 mac入门系列教程之二–-Mac与众不同(2) 转 mac入门系列教程之二–Mac与众不同(1) 转 C++带有指针数组的结构体转换为C#可用的结构体 C#调用C++版本dll时的类型转换要注意的问题 小技巧 瑞星版本20.49.30的Bug VC6类向导对窗体按钮添加的消息映射代码 c/c++下常见的内存错误及其对策 CORBA_TAO的环境配置 - sopper - 博客园 再议ManualResetEvent 异步socket的线程分配(C#) 你知道main函数参数的用处吗? - sopper - 博客园 你能确定这段代码的输出结果吗? 小技巧避免项目中的大隐患 提给dudu的一个小建议 vc6使用点滴积累
C++控件的数据交换和数据校验
sopper · 2008-05-26 · via 博客园 - sopper

MFC采用了独特的DDXDDV技术。

DDX将数据成员变量同对话类模板内的控件相连接,这样就使得数据在控件之间很容易地传输。

DDV用于数据的校验,例如它能自动校验数据成员变量数值的范围,并发出相应的警告。

在类向导下添加成员变量的过程很简单,需要说明的是

。在DDVDDX技术中,允许用户为同一个控件关联多个数据成员变量,但必须保证这些变量名是互不相同的,且这些变量在同一个类型不能有多个变量,即在ValueControl类型中各自只能有一个成员变量。

。如果添加的成员变量是一个数值类型,则在类向导对话框的Member Variables页面正文还要求用户输入变量的范围,这就是控件的数据校验设置。

添加完成成员变量后,类向导会在代码文件里加入如下代码

1.          在头文件中,添加与控件关联的成员变量的声明,代码:
// Dialog Data

     //{{AFX_DATA(CMyDlg)

       enum { IDD = IDD_DIALOG5 };

       int          m_edit;

       //}}AFX_DATA

2.          .CPP文件中的类构造函数实现代码处,添加数据成员变量的一些初始化代码

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)

         : CDialog(CMyDlg::IDD, pParent)

{

   //{{AFX_DATA_INIT(CMyDlg)

   m_edit = 0;

   //}}AFX_DATA_INIT

}

3.          .CPP文件中的DoDataExchange函数体内,添加控件的DDXDDV代码,它们都是一些以DDV_DDX_开关的函数调用。
void CMyDlg::DoDataExchange(CDataExchange* pDX)

{

      CDialog::DoDataExchange(pDX);//调用此函数作为DDX的开始

      //{{AFX_DATA_MAP(CMyDlg)

      DDX_Text(pDX, IDC_EDIT1, m_edit);//将控件与变量进行数据交换

      DDV_MinMaxInt(pDX, m_edit, 1, 10);//校验最大值和最小值  

      //}}AFX_DATA_MAP

}
需要说明的是,上述代码中以 “//{{AFX_DATA” 或“//{{AFX_DATA_XXXX”开头,而以 “//}}AFX_DATA” 或 “//}}AFX_DATA_”结尾的标记是类向导定义的专门用来做DDX/DDVr 标记,表示该部分的代码是同类向导自动管理,用户一般不需要去更改。

4.          当为一个控件定义一个关联的数据成员变量后,就可以使用CWnd::UpdataData函数实现控件的控制,包括控件相关数据的输入和读取。
UpdateData
FALSE)   数据由控件相关的成员变量向控件传输
UpdateData
TRUE)或参数为空  数据从控件向相关联的成员变量复制