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 失败时,框架使用此句柄将焦点还原到之前聚焦的控件上。 其次,PrepareEditCtrlCDataExchange 类中设置一个标志来指示要交换或验证其数据的控件是编辑控件。

对于针对其通过 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 的概述,请参阅对话框数据交换和验证对话框主题

另请参阅

MFC 示例 VIEWEX
层次结构图
CWnd::DoDataExchange
CWnd::UpdateData