Visual C++/MFC编程入门:如何建立对话框类和添加控件变量

前两讲中为你们讲解了如何建立对话框资源。建立好对话框资源后要作的就是生成对话框类了。这里再声明下,生成对话框类主要包括新建对话框类、添加控件变量和控件的消息处理函数等。当功能实现了想要拥有美观的界面能够借助Toolkit Pro进行界面优化。html

Xtreme Toolkit Pro:是屡获殊荣的VC界面库,是MFC开发中最全面界面控件套包,它提供了Windows开发所须要的11种主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。编程

点击下载Xtreme Toolkit Pro最新试用版函数

由于给你们的例程Addition是基于对话框的程序,因此程序自动建立了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的。你们用过VC++ 6.0的可能记得,咱们定义的对话框类都是从CDialog类派生的,但在VS2010中,通常对话框类都是继承自CDialogEx类。优化

建立对话框类url

若是是本身新添加的对话框模板,怎样为它建立对话框类呢?.net

1.首先按第六讲:建立对话框模板和修改对话框属性中说的那样,在Resource View的“Dialog”节点上右键,而后在右键菜单中选择“Insert Dialog”建立一个新的对话框模板,ID就使用默认的IDD_DIALOG1。code

2.在中间区域会显示新建的对话框模板,而后选中此对话框模板,点右键,在右键菜单中选择Add Class。htm

VS2010/MFC编程入门之八(对话框:建立对话框类和添加控件变量)

3.选择“Add Class”后会弹出一个对话框,在对话框中“Class name”下的编辑框中写入自定义的类名就能够了,例如CMyDialog。继承

4.最后点“Finish”完成。教程

最终你就能够在Class View中看到新生成的对话框类CMyDialog了,而且在Solution Explorer中有相应的MyDialog.h头文件和MyDialog.cpp源文件生成。CMyDialog类一样派生于CDialogEx类。

注意,通常类名都以C打头,又好比,CTestDlg。

为对话框中的控件添加变量

在上一讲中为对话框添加了几个控件,包括三个静态文本框,三个编辑框,一个按钮控件。程序自动生成的Cancel按钮保留,做为退出按钮,而OK按钮删除掉了。

静态文本框只是为了说明后面紧跟的编辑框中数据的意义,是被加数、加数仍是和,因此它们是不会变的,咱们就不为它们添加变量了。按钮控件是用来操做的,这里也不为它们添加变量。编辑框中的数据可能会常常变化,有必要为它们每一个控件关联一个变量。

首先为被加数的编辑框IDC_SUMMAND_EDIT添加变量。

1.在编辑框上点右键,在右键菜单中选择“Add Variable”。弹出添加成员变量的向导对话框。

2.咱们想为其添加值变量而不是控件变量,因此对话框中“Category”下的组合框中选择Value。

3.“Variable type”下的组合框此时默认选中的是“CString”,CString是字符串类,显然不能进行加法运算。咱们能够选择double、float、int等。这里咱们选择double,即编辑框关联一个double类型的变量。

4.在“Variable name”中写入自定义的变量名。鸡啄米为其取名m_editSummand。

VS2010/MFC编程入门之八(对话框:建立对话框类和添加控件变量)

5.点“Finish”完成。

注意,类的成员变量名通常以m_打头,以标识它是一个成员变量。

参照此方法,再分别为加数的编辑框IDD_ADDEND_EDIT添加double型变量m_editAddend、和的编辑框IDD_SUM_EDIT添加double型变量m_editSum。

对话框类的数据交换和检验

在程序运行界面中,用户每每会改变控件的属性,例如,在编辑框中输入字符串,或者改变组合框的选中项,又或者改变复选框的选中状态等。控件的属性改变后MFC会相应修改控件关联变量的值。这种同步的改变是经过MFC为对话框类自动生成的成员函数DoDataExchange()来实现的,这也叫作对话框的数据交换和检验机制。

咱们为三个编辑框添加了变量之后,在AdditionDlg.cpp中CAdditionDlg的DoDataExchange()函数的函数体中多了三条DDX_Text调用语句。下面是函数体代码和鸡啄米添加的注释。

C++代码

void CAdditionDlg::DoDataExchange(CDataExchange* pDX)
{
// 处理MFC默认的数据交换
CDialogEx::DoDataExchange(pDX);
// 处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换
DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);
// 处理控件IDC_ADDEND_EDIT和变量m_editAddend之间的数据交换
DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);
// 处理控件IDC_SUM_EDIT和变量m_editSum之间的数据交换
DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);
}

再以Addition程序为例简单说下数据交换机制。若是咱们在程序运行界面中输入被加数,则经过CAddition的DoDataExchange()函数能够将输入的值保存到m_editSummand变量中,反之若是程序运行中修改了变量m_editSummand的值,则经过CAddition的DoDataExchange()函数也能够将新的变量值显示到被加数的编辑框中。

可是这种数据交换机制中,DoDataExchange()并非被自动调用的,而是须要咱们在程序中调用CDialogEx::UpdateData()函数,由UpdateData()函数再去自动调用DoDataExchange()的。

CDialogEx::UpdateData()函数的原型为:

BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

参数:bSaveAndValidate用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给控件。默认值是TRUE,即从控件传给变量。

返回值:CDialogEx::UpdateData()函数的返回值表示操做是否成功,成功则返回TRUE,不然返回FALSE。

在下一讲中将具体演示CDialogEx::UpdateData()函数如何使用。

本节主要讲的是新建对话框类和添加控件变量,控件的消息处理函数将在下一讲详细介绍。

点击获取更多教程资源>>

转载自:http://www.jizhuomi.com/software/153.html

相关文章
相关标签/搜索