VS2010/MFC对话框:创建对话框类和添加控件变量

创建对话框类和添加控件变量

前两讲中讲解了如何创建对话框资源。创建好对话框资源后要做的就是生成对话框类了。生成对话框类主要包括新建对话框类、添加控件变量和控件的消息处理函数等。

例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的。大家用过VC++ 6.0的可能记得,我们定义的对话框类都是从CDialog类派生的,但在VS2010中,一般对话框类都是继承自CDialogEx类。

创建对话框类

如果是自己新添加的对话框模板,怎样为它创建对话框类呢?

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

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

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。

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++代码

  1. void CAdditionDlg::DoDataExchange(CDataExchange* pDX)
  2. {
  3. // 处理MFC默认的数据交换
  4. CDialogEx::DoDataExchange(pDX);
  5. // 处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换
  6. DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);
  7. // 处理控件IDC_ADDEND_EDIT和变量m_editAddend之间的数据交换
  8. DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);
  9. // 处理控件IDC_SUM_EDIT和变量m_editSum之间的数据交换
  10. DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);
  11. }

鸡啄米再以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()函数如何使用。

本节主要讲的是新建对话框类和添加控件变量,控件的消息处理函数将在下一讲详细介绍。依然欢迎大家常回鸡啄米博客学习和讨论。

时间: 2024-10-26 11:18:11

VS2010/MFC对话框:创建对话框类和添加控件变量的相关文章

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

原文网址:http://www.jizhuomi.com/software/153.html 前两讲中鸡啄米为大家讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.鸡啄米再声明下,生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 因为鸡啄米给大家的例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的.大家用过VC++6.0

VS2010/MFC编程(对话框:模态对话框及其弹出过程)

讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出. 一.模态对话框和非模态对话框 Windows对话框分为两类:模态对话框和非模态对话框. 模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互. 非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入.非模态对话框一般用来显示提示信息等. 大家对Windows系统很了解,相信这两种对话框应该都遇到过.之前的加法计算器对话框其实就是模

VS2010/MFC对话框:为对话框添加控件)

为对话框添加控件 创建对话框资源需要创建对话框模板.修改对话框属性.为对话框添加各种控件等步骤,前面一讲中已经讲了创建对话框模板和修改对话框属性,本节继续讲如何为对话框添加控件. 上一讲中创建了一个名为“Addition”的工程,目的是生成一个实现加法运算的应用程序.实现加法计算有几个必要的因素:被加数.加数.和.被加数和加数需要输入,和需要输出显示.那么这几个因素都需要相应的控件来输入或显示,下面鸡啄米就一步步讲解如何添加这些控件. 1.为对话框添加一个静态文本框(Static Text),用

对话框上动态控件的创建、在Picture Control控件上显示图片

1  MFC对话框之上的动态控件的创建 对话框上的控件是MFC类的一个具体对象. 当在对话框之上使用静态控件时,可以根据类向导来为每个控件添加消息.响应函数以及变量. 当需要在对话框中动态的创建某个控件时,就需要手动来代替类向导为动态控件添加消息.响应函数及变量. 动态创建控件时,可按照以下步骤进行: (1) 明确控件所属于的类 每一个控件都对应着一个类(例如按钮Button所属于的类为CButton). 如,在程序中我们需要用CButton类创建一个具体的按钮对象,并用函数指示它在对话框之上的

(转载)VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)

前面一节中鸡啄米为大家简单介绍了如何创建Ribbon样式的应用程序框架,本节教程就来初步讲讲怎样为Ribbon Bar添加Ribbon控件. VS2010为Ribbon界面开发提供了Ribbon Designer,通过它我们可以为Ribbon Bar添加各种Ribbon控件.设置控件属性和进行界面布局. Ribbon的界面元素可以分为类别.面板和基本控件(按钮.文本编辑框等),类别由面板组成,面板又由按钮.文本编辑框等基本控件组成. 鸡啄米以实例的方式讲解Ribbon控件的添加方法和属性,这样比

VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)[转]

http://www.jizhuomi.com/software/253.html 前面一节中鸡啄米为大家简单介绍了如何创建Ribbon样式的应用程序框架,本节教程就来初步讲讲怎样为Ribbon Bar添加Ribbon控件. VS2010为Ribbon界面开发提供了Ribbon Designer,通过它我们可以为Ribbon Bar添加各种Ribbon控件.设置控件属性和进行界面布局. Ribbon的界面元素可以分为类别.面板和基本控件(按钮.文本编辑框等),类别由面板组成,面板又由按钮.文本编

【来写个2048吧】—— 创建卡片类以及添加

一.创建卡片类 首先想想卡片是一个精灵,那么我们就继承精灵类.然后还要有数字,背景颜色.基本就这些,那么看代码吧. Card.h代码 #ifndef _CARD_H_ #define _CARD_H_ #include "cocos2d.h" USING_NS_CC ; class CardSprite : public Sprite { public : //这里number是卡片数字,wight和height是宽和高,cardSpriteX和CardSpriteY是卡片坐标 sta

能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么

不能向编译后得到的类中增加实例变量!能向运行时创建的类中添加实例变量! 因为编译后的类已经注册在runtime中,类结构体中的objc_ivar_list 实例变量的链表和instance_size实例变量的内存大小已经确定,同时runtime 会调用class_setIvarLayout 或 class_setWeakIvarLayout来处理strong weak引用,所以不能向存在的类中添加实例变量. 运行时创建的类是可以添加实例变量,调用 class_addIvar 函数,但是得在调用 

VS对话框按钮贴图和Static控件自定义

软件开发中,为了让用户更喜欢使用我们的软件,除了具有良好的性能外,还需要美观的界面. 本文简单地介绍下对话框背景贴图和按钮贴图,以及Static控件自定义成各种Static效果. 首先贴个图,让大家看看效果 1.新建对话框应用程序 2.添加图片资源 3.背景贴图 重写OnPaint函数 void CDlgBmpTestDemoDlg::OnPaint() { CPaintDC dc(this); // 用于绘制的设备上下文 //绘制背景 CBitmap bitmap; bitmap.LoadBi