zoukankan      html  css  js  c++  java
  • 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。

     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++代码
    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()函数如何使用。

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

    转自:http://www.jizhuomi.com/software/181.html

  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9649935.html
Copyright © 2011-2022 走看看