对话框数据交换和验证机制
在VC中,所有的对话框函数都是使用C++代码实现的,它并没有采用特殊的资源或“奇特”的宏,但却可以很好地实现用户与应用程序之间的交互工作,这里的关键就在于对话框应用程序中广泛采用的对话框数据交换和验证机制。
对话框数据交换(Dialog Data Exchange,DDE)用于初始化对话框中的控件并获取用户的数据输入,而对话框数据验证(Dialog Data Validation,DDV)则用于验证对话框中数据输入的有效性。MFC在每个对话框类中提供了一个用于重载的虚函数——DoData Exchange来实现对话框数据交换和验证工作。
• 对话框数据交换
如果使用DDE机制,则通常在OnInitDialog程序或对话框构造函数中设置对话框对象成员变量的初始值。在对话框即将显示前,应用程序框架的DDE机制将成员变量的值传递给对话框的控件,当对话框响应DoModal或Create而被显示时,对话框控件将“显示”这些值。Cdialog类中的OnInitDialog函数默认时将调用CWnd类的UpdateData成员函数初始化对话框中的控件。UpdateData函数的原型如下:
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
函数参数为TRUE,即将对话框及其控件中的数据传递给程序代码中的成员变量;函数参数为FALSE,即将类中的数据状态传递给对话框及其控件。
当 用户重载DoDataExchange函数时,也就为每一个数据成员(控件)指定了一个DDE函数调用。
• 对话框数据验证
除了调用DDE参数指定数据交换外,用户还可以使用DDV函数进行对话框数据验证。在调用控件的DDE函数后,必须立即调用该控件的DDV函数。大部分DDV函数的原型如下所示。
DDV_MinMaxCustom(pDX, Data, MinData, MaxData);
其中,参数pDX是一个指向CdataExchange对象的指针,参数Data中存放着即将被验证的数据,后两个参数用于定制数据的范围。
如果仅仅需要使用对话框数据,一般没有必要了解数据交换/验证的核心内容。但在了解了数据交换和验证的实质后,用户就可以编写自己的数据交换和验证代码,定制DDE/DDV。