• 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、点击“完成”。
       注意,类的成员变量名一般以m_打头,以标识它是一个成员变量。
       参照此方法,在分别为加数的编辑框IDD_ADDEND_EDIT添加double型变量m_editAddend、和的编辑框IDD_SUM_EDIT添加double型变量m_editSum。
    三、对话框类的数据交换和校验
       在程序运行界面中,用户往往会改变控件的属性,例如,在编辑框中输入字符串,或者改变组合框的选中项,又或者改变复选框的选中状态等。控件的属性
    改变后MFC会相应修改控件关联变量的值。这种同步的改变是通过MFC为对话框类自动生成的成员函数DoDataExchange()来实现的,这也叫做对话框的数据交换和
    检验机制。
       我们为三个编辑框添加了变量后,在AdditionDlg.cpp中CAdditionDlg的DoDataExchange()函数体中多了三条DDX_Text调用语句。下面是函数体代码:

       如果我们在运行界面中输入被加数,则通过CAddition的DoDataExchange()函数可以将输入的值保存到m_summand变量中,反之如果程序运行中修改了变量
    m_summand的值,则通过CAddition的DoDataExchange()函数也可以将新的变量值显示到被加数的编辑框中。
       但是这种数据交换机制中,DoDataExchange()并不是被自动调用的,而是需要我们在程序中调用CDialogEx::UpdateData()函数,由UpdateData()函数再去
    自动调用DoDataExchange()的。
       CDialogEx::UpdateData()函数的原型为:
       BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
       参数:bSaveAndValidate用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给数据给控件。默认值是TRUE,即从控件传给变量。
       返回值:CDialogEx::UpdateData()函数的返回值表示是否成功,成功则返回TRUE,否则返回FALSE。

  • 相关阅读:
    浅析Java中的final关键字
    浅谈JAVA集合框架
    While reading XXX pngcrush caught libpng error: N
    git/svn里面的merge和rebase区别
    kvc kvo 总结---180313
    iOS 拨打电话三种方式总结
    IOS中获取各种文件的目录路径的方法-备
    文件管理系统-备
    iOS界面调试工具 Reveal-备用
    十六进制string转换UIColor -备用
  • 原文地址:https://www.cnblogs.com/mupiaomiao/p/6201812.html
Copyright © 2020-2023  润新知