设为首页 加入收藏

TOP

6.2.10 对话框的数据交换和检验机制
2013-10-07 00:01:51 来源: 作者: 【 】 浏览:53
Tags:6.2.10 对话 数据 交换 检验 机制

6.2.10  对话框的数据交换和检验机制
对话框的数据成员变量存储了与控件相对应的数据。数据变量需要和控件交换数据,以完成输入或输出功能。例如,一个文本框既可以用来输入,也可以用来输出。用做输入时,用户在其中输入了字符后,对应的数据成员应该更新;用做输出时,应及时刷新文本框的内容以反映相应数据成员的变化。对话框需要一种机制来实现这种数据交换功能,这对对话框来说是至关重要的。
MFC提供了类CDataExchange来实现对话框类与控件之间的数据交换(DDX,Dialog Data Exchange),该类还提供了数据有效机制(DDV,Dialog Data Validity),即验证输入到对话框中的数据的有效性(例如,在本例中限制口令输入框的输入在0~9999之间的整数,那么当用户在其中输入了字符、实数或大于9999的整数时,CDataExchange的DDV机制就会自动生成报错消息来提醒用户)。数据交换和数据有效机制适用于文本框、复选框、单选按钮、列表框和组合框。在给每个控件连接相应变量时,ClassWizard同时自动完成了有关DDX和DDV的代码。数据交换的工作由CDialog::DoDataExchange来完成。可在PasswordDialog.cpp文件中找到CPasswordDlg::DoDataExchange函数。为其添加如下代码:
 
 
MFC提供了处理控件与控件变量之间的数据交换的机制,因此在代码中访问控件的属性,就可以直接通过访问控件变量进行。如实例dialog_1运行时,打开口令对话框,在“请输入口令”输入框中输入整数,通过PasswordDialog::DoDataExchange()函数,m_Password就自动保存所有输入的字符串值,反之如果程序运行时修改了m_Password,则通过PasswordDialog::DoDataExchange()函数,“请输入口令”输入框就会显示m_Password的值。
这里需要注意,控件和控件变量之间的数据交换并非自动完成的,即DoDataExchange()函数不是自动被调用的。例如在“会员名”输入框中输入字符串时,m_Password的值不随之改变,需要调用CDialog::UpdateData()函数才能做到从控件到控件变量或者从控件变量到控件的数据传送。
CDialog::UpdateData()函数的原型为:
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
bSaveAndValidate参数用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给数据。
CDialog::UpdateData()函数的返回值用于确定操作是否成功,为FALSE表示不成功。
添加上述代码以后,我们再来看看程序的运行结果。运行程序弹出口令对话框,在“请输入口令”输入框中输入口令。假如我们输入的不是0~9999的整数的话就会出现如图6-19所示的提示框。这里我们在“请输入口令”文本框中输入的是“5678”。单击“确定”按钮。
同样地,输入别的不符合规定的错误口令也会弹出如图6-19所示的警告,只有当我们输入正确的口令“1234”时,才会弹出一个登录成功的对话框,如图6-20所示。


图6-19  在口令对话框中输入“5678”按“确认”按钮后的 
     

    图6-20  登录成功

【责任编辑:杨硕 TEL:(010)68476636-8001】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.2.7 为对话框类添加控件成员变量 下一篇6.2.2 为应用程序添加对话框

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: