MFC中的UpdateData

    下面是一段MSDN上的内容:

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

当用户单击“确定”按钮(或任何时候调用参数为 TRUEUpdateData 成员函数)时,同样是该机制将控件中的值传输到成员变量。对话框数据验证机制将验证您指定了验证规则的任何数据项。

下图阐释了对话框数据交换。

对话框数据交换

MFC中的UpdateData_第1张图片

正如传递给它的 BOOL 参数所指定的那样,UpdateData 进行双向交换。为了执行交换,UpdateData 设置 CDataExchange 对象并调用对话框类对 CDialogDoDataExchange 成员函数的重写。DoDataExchange 采用 CDataExchange 类型的参数。传递给 UpdateDataCDataExchange 对象表示交换的上下文,它定义交换方向等信息。

当您(或某个代码向导)重写 DoDataExchange 时,也就指定了对每一数据成员(控件)的一个 DDX 函数的调用。UpdateData 传递给您的 DoDataExchange 一个 CDataExchange 参数,每个 DDX 函数都知道如何根据该参数所提供的上下文在两个方向交换数据。

MFC 提供许多用于不同交换类型的 DDX 函数。下例显示一个 DoDataExchange 重写,其中调用了两个 DDX 函数和一个 DDV 函数:

void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);    // Call base class version
    DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVar);
    DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName);
    DDV_MaxChars(pDX, m_strName, 20);
}

DDX_ 行和 DDV_ 行是数据映射。显示的示例 DDX 和 DDV 函数分别用于复选框 (CheckBox) 控件和编辑框控件。

如果用户取消有模式对话框,则 OnCancel 成员函数终止该对话框,并且 DoModal 返回 IDCANCEL 值。在此情况下,对话框和对话框对象之间不进行任何数据交换。



简单地说,UpdateData这个函数是用来更新数据的,它有一个BOOL型的参数,

当参数为TRUE时(默认参数就是TRUE),更新窗口中用户输入的值到程序中;(由外到内

当参数为FALSE时,将程序中的某个值刷新显示到窗口上。(由内到外


举例来说,譬如一个Edit控件,

若这个Edit是用于接收用户输入的,那么就可以用UpdateData(TRUE)来将用户输入的值保存到程序的某个变量中;

若这个Edit是用于显示数据的(只读),那么当程序中该控件绑定的变量值改变时,可以调用UpdateData(FALSE)函数来更新Edit中的显示。


你可能感兴趣的:(MFC)