VC++中对话框数据交换【十全十美】

简介:

   如果使用 DDX 机制,则通常在 OnInitDialog 处理程序或对话框构造函数中设置对话框对象成员变量的初始值。在对话框即将显示前,框架的 DDX 机制将成员变量的值传输给对话框中的控件,当对话框本身为响应 DoModal 或 Create 而出现时,这些值即出现在该对话框中。

CDialog 中 OnInitDialog 的默认实现调用 CWnd 类的 UpdateData 成员函数以初始化对话框中的控件。当用户单击“确定”按钮(或任何时候调用参数为 TRUE 的 UpdateData 成员函数)时,同样是该机制将控件中的值传输到成员变量。对话框数据验证机制将验证您指定了验证规则的任何数据项。 
        正如传递给它的 BOOL 参数所指定的那样,UpdateData 进行双向交换。为了执行交换,UpdateData 设置 CDataExchange 对象并调用对话框类对 CDialog 的 DoDataExchange 成员函数的重写。DoDataExchange 采用 CDataExchange 类型的参数。传递给 UpdateData 的 CDataExchange 对象
表示交换的上下文,它定义交换方向等信息。当您(或某个代码向导)重写 DoDataExchange 时,也就指定了对每一数据成员(控件)的一个 DDX 函数的调用。UpdateData 传递给您的 DoDataExchange 一个 CDataExchange 参数,每个 DDX 函数都知道如何根据该参数所提供的上下文在两个方向
交换数据。MFC 提供许多用于不同交换类型的 DDX 函数。下例显示一个 DoDataExchange 重写,其中调用了两个 DDX 函数和一个 DDV 函数: 
 
 
  1. void CMyDialog::DoDataExchange(CDataExchange* pDX) 
  2.     CDialog::DoDataExchange(pDX);    // Call base class version 
  3.     DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVar); 
  4.     DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName); 
  5.     DDV_MaxChars(pDX, m_strName, 20); 
  6. DDX_ 行和 DDV_ 行是数据映射。显示的示例 DDX 和 DDV 函数分别用于复选框 (CheckBox) 控件和编辑框控件。 如果用户取消有模式对话框,则 OnCancel 成员函数终止该对话框,并且 DoModal 返回 IDCANCEL 值。在此情况下
  7. ,对话框和对话框对象之间不进行任何数据交换。





本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/1097056 ,如需转载请自行联系原作者

相关文章
|
BI C++
C++文件(夹)选择对话框
由于各种应用,我们需要调用系统的打开文件对话框或者打开文件夹对话框,或两者兼有。今遇到这个情况已经解决,特写下这篇博文。 1.打开文件对话框常用的方法是使用系统的CFileDialog。这里介绍另外一种方法就是使用OPENFILENAME这个结构体和GetOpenFileName()这个函数,可以实现单选文件或者多选文件,代码如下: 需引入头文件#include "CommDlg.
2899 0
|
C++
【C/C++学院】(17)QT标准对话框/toolbox类
<h1><span style="font-family:'Microsoft YaHei UI','Microsoft YaHei',SimSun,'Segoe UI',Tahoma,Helvetica,sans-serif,'Microsoft YaHei',Georgia,Helvetica,Arial,sans-serif,宋体,PMingLiU,serif; font-size:
2950 0
VC++在对话框中加入属性页
当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置。本文针对这种方法来讨论几种可能实现的方案。 方案一本方案的例子请见源代码打包文件中的Property1部分 在对话框上放置一个Tab Control的控件,再在对话框上放置所需的控件(本例放置了2个按钮,试图在每个标签中显示一个)。
1280 0
|
C++ Windows
Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法
详细说明:Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法。该方法可以在运行时在内存中直接建立对话框资源,使用起来更为灵活。适用于多个开发项目共享有界面的公用程序模块的情况,也适用于编写需要显示大量对话框或对话框风格随着用户输入不断变化的应用程序。
1003 0
|
C++
C/C++自动调整界面布局的对话框
来源:http://blog.csdn.net/xianglitian/article/details/5667015 例子:http://download.csdn.net/download/xianglitian/2425531 CodeProject上的例子: EasySize - Dialog resizing in no time! http://www.
821 0
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
11月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
423 12
|
9月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
227 0