基于VC++的对话框编程中UpdateData函数的应用

时间:2022-08-29 08:26:28

基于VC++的对话框编程中UpdateData函数的应用

摘要:在Windows程序开发中,对话框是程序和用户沟通的桥梁。该文介绍了在对话框程序设计中如何使用UpdateData函数实现数据的交换。

关键词:VC++;对话框;控件;UpdateData函数

中图分类号:TP312文献标识码:A文章编号:1009-3044(2011)17-4075-02

Application of UpdateData Function in Dialog Programming Based on VC++

CHEN Zhi-yuan, LUO Gang

(Henan Architectural Engineering School, Henan Technical College of Construction, Zhengzhou 450007, China)

Abstract: In the Windows application development, the dialog is a bridge between program and user. This article describes how to use UpdateData function to exchange data in dialog programming.

Key words: VC++; dialog; control; updateData function

Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。VC++整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Microsoft .NET框架。目前最新的版本是Microsoft Visual C++ 2010。

对话框应用程序是Windows编程中一项非常重要的内容。对话框(Dialog)是windows应用程序与用户之间进行交互的重要手段,应用程序通过对话框获得用户的输入,并通过对话框将程序运行的有关信息显示给用户,是用户与程序沟通的桥梁。

为实现程序的交互功能,接受各种消息驱动,对话框中还应该包括各种类型的控制对象,例如静态文本、文本编辑框和命令按钮等,这些对象成为控件(Control)。对话框依靠它所包含的空间与用户进行交互,实现数据的输入和信息的输出。

1 对话框的数据交换机制

对话框类的数据成员变量需要预期对应的空间交换数据,以完成输入或输出功能。例如,用户在一个编辑框中输入了数据后,可将该数据传送给其对应的成员变量,从而完成输入;如果某个成员变量中存放了有计算结果或向用户现实的信息,可将该变量的值传送给其对应的控件,由控件显示出来,从而实现输出。

对话框需要一种机制实现对话框类与控件之间的数据交换功能,这对对话框来说是至关重要的。MFC(微软基础类库)提供的CDdataExchange类的数据交换(Dialog Data Exchange,DDX)机制来实现这种功能,该类还提供了数据有效化机制(Dialog Data Validation,DDV)来检测用户输入的数据是否符合要求。数据交换DDX和数据有效性机制DDV适用于编辑框、检查框、单选按钮、列表框和组合框等。

当程序中需要交换数据时,不要直接调用DoDataExchange函数,而应该调用CWnd::UpdateData函数,在该函数内调用了DoDataExchange。UpdateData函数的原型为BOOL UpdateData(BOOL bSaveAndValidate = TRUE)。

UpdateData函数只有一个布尔型参数,该参数决定了数据传送的方向。参数为TRUE或缺省时,是将数据从对话框的控件中传送到对应的数据成员变量中;当参数为FALSE时,则将数据从数据成员变量中传送给对应的控件,从而在控件上显示出来。

UpdateData函数的返回值也是BOOL型的,如果参数bSaveAndValidate为TRUE,只有当从控件上得到的数据符合有效性检查并赋给对应的成员变量时,UpdateData函数的返回值才是TRUE。

2 UpdateData函数

2.1 函数说明

在对话框编程过程中,对于可以接收数据的控件如编辑控件来说,UpdateData()函数至关重要。当控件内容发生变化时,对应的成员变量的值并没有跟着变化,同样,当成员变量值变化时,控件内容也不会跟着变。UpdateData()函数就是解决这个问题的。其中UpdateData(true)是将控件的值赋值给成员变量;UpdateData(false)是将成员变量的值赋值给控件;UpdateData是用来刷新当前对话框。

也就是说,当使用类向导ClassWizard建立了控件和变量之间的联系后,如果修改了成员变量的值,希望相应的控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果想知道用户在对话框控件中输入了什么,就应该在访问其所对应的成员变量前调用UpdateData(TRUE)。

2.2 对话框编程中UpdateData函数的应用

2.2.1 程序主界面

通过编写一个与用户进行信息交互的基于对话框的Windows应用程序:输入三角形的三条边求三角形的面积,来探讨如果通过UpdateData函数实现对话框中编辑控件的数据交换。程序主对话框界面如图1所示。

程序主对话框中包括四个静态文本控件、四个文本编辑框控件和两个按钮控件。静态文本控件主要用来放置说明性、提示性的文本。文本编辑框控件是用户输入文本的地方,是对话框与用户之间进行交互的主要渠道。按钮控件是通过响应其所对应的消息函数完成一定的操作,对“退出”按钮的响应就是退出整个对话框窗口,而“计算面积”按钮所对应的消息函数将完成对三角形面积的计算。

2.2.2 程序实现及主要代码

2.2.2.1 建立MFC应用程序工程

为了在Visual C++ 中建立一个应用程序,首先要创建该应用程序的工程。使用MFC AppWizard(MFC应用程序向导)创建基于对话框的工程,工程取名“Triangle”,最后,生成应用程序框架。至此,AppWizard为Triangle应用程序生成了其工程所需的资源、类和有关文件,生成了一个可编译、连接、运行的应用程序框架和基本代码,生成如图2所示的主对话框。

2.2.2.2 生成控件的成员变量

主对话框生成之后,需要添加相应的控件以及对对话框做相应的编辑,才能实现如图1所示的效果。其中增加了四个文本编辑框,用来输入输出数据,包括三个边长输入框和一个面积输出框。四个编辑框按照图示顺序ID号分别为ID_EDIT1、ID_EDIT2、ID_EDIT3和ID_EDIT4,所对应的成员变量为m_Side_a、m_Side_b、m_Side_c和m_Area。

2.2.2.3 “计算面积”按钮消息函数

使用应用程序向导生成“计算面积”按钮的消息函数,代码如下:

void CTriangleDlg::OnBnClickedCalc()

{// TODO: 在此添加控件通知处理程序代码

UpdateData();

if(m_Side_a+m_Side_b

AfxMessageBox("输入的三边不能构成三角形,请重新输入");

else

{

double s;

s = (m_Side_a+m_Side_b+m_Side_c)/2;

s = s*(s-m_Side_a)*(s-m_Side_b)*(s-m_Side_c);

m_Area =sqrt(s);

UpdateData(FALSE);

}}

在对话框中输入三角形三边即a、b、c的值后,点击“计算面积”按钮,响应该按钮消息函数。该函数首先调用了UpdateData函数,参数为默认值。而后根据输入的三角形的三边长度判断能否构成三角形,如果符合构成三角形的条件,则计算三角形的面积。面积计算结束,再次调用了UpdateData函数,参数为FALSE。该函数两次调用UpdateData函数,第一次调用该函数使用了默认参数值TRUE,目的是将对话框中的三个边长编辑框控件中的数值传送到对应的成员变量中。即该函数调用后,三边长所对应的成员变量m_Side_a、m_Side_b和m_Side_c分别得到了用户输入的三个边长数值。第二次调用该函数时,参数为FALSE,目的是用对应的成员变量的值刷新对话框空间中现实的数据,从而将计算后存放三角形面积的成员变量m_Area中的值送回对话框界面。这样才能够正确地进行计算以及将计算结果在对话框中显示出来。

3 结束语

对话框作为与用户交互的窗口,其输入输出功能非常重要,而控件和成员变量之间的数据交换是关键,UpdateData函数起着关键性的作用。

参考文献:

[1] 刘瑞.Visual C++项目开发实用案例[M].北京:科学出版社,2006.

[2] Eckel B,Allison C.C++编程思想(第2卷)实用编程技术[M].北京:机械工业出版社,2006.

[3] 林青松.Visual C++案例开发[M].北京:中国水利水电出版社,2005.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

上一篇:基于ACL的企业园区网络安全设计 下一篇:基于WEB的学院教务管理系统设计与应用