CDataExchange 类
支持 Microsoft 基础类使用的对话框数据交换 (DDX) 和对话框数据验证 (DDV) 例程。
语法
class CDataExchange
成员
公共构造函数
名称 | 描述 |
---|---|
CDataExchange::CDataExchange | 构造 CDataExchange 对象。 |
公共方法
名称 | 描述 |
---|---|
CDataExchange::Fail | 验证失败时调用。 将焦点重置到上一个控件并引发异常。 |
CDataExchange::PrepareCtrl | 为数据交换或验证准备指定的控件。 用于非编辑控件。 |
CDataExchange::PrepareEditCtrl | 为数据交换或验证准备指定的编辑控件。 |
CDataExchange::PrepareOleCtrl | 为数据交换或验证准备指定的 OLE 控件。 用于非编辑控件。 |
公共数据成员
“属性” | 描述 |
---|---|
CDataExchange::m_bSaveAndValidate | DDX 和 DDV 方向的标志。 |
CDataExchange::m_pDlgWnd | 发生数据交换的对话框或窗口。 |
备注
CDataExchange
没有基类。
如果要为自定义数据类型或控件编写数据交换例程,或者编写自己的数据验证例程,请使用此类。 若要详细了解如何编写自己的 DDX 和 DDV 例程,请参阅技术说明 26。 有关 DDX 和 DDV 的概述,请参阅对话框数据交换和验证和对话框。
CDataExchange
对象提供发生 DDX 和 DDV 所需的上下文信息。 当 DDX 用于从数据成员填充对话框控件的初始值时,m_bSaveAndValidate 标志为 FALSE。 当 DDX 用于将对话框控件的当前值设置为数据成员,以及在使用 DDV 验证数据值时,m_bSaveAndValidate 标志为 TRUE。 如果 DDV 验证失败,DDV 过程将显示一个说明输入错误的消息框。 然后,DDV 过程将调用 Fail
来将焦点重置到有问题的控件上,并引发异常来停止验证过程。
继承层次结构
CDataExchange
要求
标头:afxwin.h
CDataExchange::CDataExchange
调用此成员函数来构造 CDataExchange
对象。
CDataExchange(
CWnd* pDlgWnd,
BOOL bSaveAndValidate);
参数
pDlgWnd
指向包含控件的父窗口的指针。 通常,这是 CDialog 派生的对象。
bSaveAndValidate
如果为 TRUE,此对象将验证数据,然后将数据从控件写入成员。 如果为 FALSE,此对象会将数据从成员移动到控件。
备注
自行构造一个 CDataExchange
对象,将额外的信息存储在数据交换对象中,以传递给窗口的 CWnd::DoDataExchange 成员函数。
示例
CYourDataExchange dx(this, FALSE);
try
{
DoDataExchange(&dx);
}
catch (CUserException *pe)
{
// some part of the exchange went wrong
// but the user has already been notified
pe->Delete();
}
CDataExchange::Fail
当对话框数据验证 (DDV) 操作失败时,框架会调用此成员函数。
void Fail();
备注
Fail
会将焦点还原到验证失败的控件上并重新选择该控件(如果存在要还原的控件)。 然后,Fail
引发一个 CUserException 类型的异常来停止验证过程。 出现异常时,会显示一个消息框来说明错误。 DDV 验证失败后,用户可在有问题的控件中重新输入数据。
当验证失败时,自定义 DDV 例程的实现者可以从其例程调用 Fail
。
若要详细了解如何编写自己的 DDX 和 DDV 例程,请参阅技术说明 26。 有关 DDX 和 DDV 的概述,请参阅对话框数据交换和验证和对话框主题。
CDataExchange::m_bSaveAndValidate
此标志指示对话框数据交换 (DDX) 操作的方向。
BOOL m_bSaveAndValidate;
备注
如果在用户编辑控件后,CDataExchange
对象用于将数据从对话框控件移动到对话框类数据成员,则该标志是非零值。 如果对象用于从对话框类数据成员初始化对话框控件,则标志为零。
在对话框数据验证 (DDV) 期间,标志也是非零的。
若要详细了解如何编写自己的 DDX 和 DDV 例程,请参阅技术说明 26。 有关 DDX 和 DDV 的概述,请参阅对话框数据交换和验证和对话框主题。
CDataExchange::m_pDlgWnd
包含指向 CWnd 对象的指针,在该对象中发生对话框数据交换 (DDX) 或验证 (DDV)。
CWnd* m_pDlgWnd;
备注
此对象通常是一个 CDialog 对象。 自定义 DDX 或 DDV 例程的实现者可使用此指针来获取对包含所操作控件的对话框窗口的访问权限。
若要详细了解如何编写自己的 DDX 和 DDV 例程,请参阅技术说明 26。 有关 DDX 和 DDV 的概述,请参阅对话框数据交换和验证和对话框主题。
CDataExchange::PrepareCtrl
框架调用此成员函数,为对话框数据交换 (DDX) 和验证 (DDV) 准备指定的控件。
HWND PrepareCtrl(int nIDC);
参数
nIDC
要为 DDX 或 DDV 准备的控件的 ID。
返回值
要为 DDX 或 DDV 准备的控件的 HWND。
备注
对于编辑控件,请改用 PrepareEditCtrl;对于其他所有控件,请使用此成员函数。
准备包括将控件的 HWND 存储在 CDataExchange
类中。 当 DDX 或 DDV 失败时,框架使用此句柄将焦点还原到之前聚焦的控件上。
对于针对其通过 DDX 交换数据或通过 DDV 验证数据的所有非编辑控件,自定义 DDX 或 DDV 例程的实现者应调用 PrepareCtrl
。
若要详细了解如何编写自己的 DDX 和 DDV 例程,请参阅技术说明 26。 有关 DDX 和 DDV 的概述,请参阅对话框数据交换和验证和对话框主题。
CDataExchange::PrepareEditCtrl
框架调用此成员函数,为对话框数据交换 (DDX) 和验证 (DDV) 准备指定的编辑控件。
HWND PrepareEditCtrl(int nIDC);
参数
nIDC
要为 DDX 或 DDV 准备的编辑控件的 ID。
返回值
正在为 DDX 或 DDV 准备的编辑控件的 HWND。
备注
对于所有非编辑控件,请改为使用 PrepareCtrl。
准备涉及到两个操作。 首先,PrepareEditCtrl
将控件的 HWND 存储在 CDataExchange
类中。 当 DDX 或 DDV 失败时,框架使用此句柄将焦点还原到之前聚焦的控件上。 其次,PrepareEditCtrl
在 CDataExchange
类中设置一个标志来指示要交换或验证其数据的控件是编辑控件。
对于针对其通过 DDX 交换数据或通过 DDV 验证数据的所有编辑控件,自定义 DDX 或 DDV 例程的实现者应调用 PrepareEditCtrl
。
若要详细了解如何编写自己的 DDX 和 DDV 例程,请参阅技术说明 26。 有关 DDX 和 DDV 的概述,请参阅对话框数据交换和验证和对话框主题。
CDataExchange::PrepareOleCtrl
框架调用此成员函数,为对话框数据交换 (DDX) 和验证 (DDV) 准备指定的 OLE 控件。
COleControlSite* PrepareOleCtrl(int nIDC);
参数
nIDC
要为 DDX 或 DDV 准备的 OLE 控件的 ID。
返回值
指向 OLE 控件站点的指针。
备注
对于编辑控件,请改为使用 PrepareEditCtrl;对于所有非 OLE 控件,请改为使用 PrepareCtrl。
对于针对其通过 DDX 交换数据或通过 DDV 验证数据的所有 OLE 控件,自定义 DDX 或 DDV 例程的实现者应调用 PrepareOleCtrl
。
若要详细了解如何编写自己的 DDX 和 DDV 例程,请参阅技术说明 26。 有关 DDX 和 DDV 的概述,请参阅对话框数据交换和验证和对话框主题。