向控件添加变量之后,类中多了什么?
1.新建一个MFC对话框项目名字为:Addition。
2.插入一个新的对话框资源IDD_DIALOG1,右键添加一个类:CMyDialog
3.此时,在左侧的“解决方案资源管理器”中多出两个文件:MyDialog.h MyDialog.cpp
下面是这两个文件的内容:
MyDialog.h
#pragma once // CMyDialog 对话框 class CMyDialog : public CDialogEx { DECLARE_DYNAMIC(CMyDialog) public: CMyDialog(CWnd* pParent = NULL); // 标准构造函数 virtual ~CMyDialog(); // 对话框数据 enum { IDD = IDD_DIALOG1 }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() };
MyDialog.cpp
// MyDialog.cpp : 实现文件 // #include "stdafx.h" #include "Addition.h" #include "MyDialog.h" #include "afxdialogex.h" // CMyDialog 对话框 IMPLEMENT_DYNAMIC(CMyDialog, CDialogEx) CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/) : CDialogEx(CMyDialog::IDD, pParent) { } CMyDialog::~CMyDialog() { } void CMyDialog::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) END_MESSAGE_MAP() // CMyDialog 消息处理程序
4.我们在最初的对话框上,画3个EDIT,1个BUTTON,做一个加法计算器的界面。
5.然后在第一个EDIT控件上右键 --> 添加变量 --> m_editSummand,其余控件变量名为:
m_editAddend、m_editSum
6.此时,我们新建的类中并没有多出什么。但是最初的对话框类中却多了一些东西:
7.注意:上面左图的3个控件变量属性要改成double。
【我们想为其添加值变量而不是控件变量,所以对话框中“Category”下的组合框中选择Value。】
如果我们在程序运行界面中输入被加数,则通过CAddition的DoDataExchange()函数可以将输入的值保存到m_editSummand变量中,反之如果程序运行中修改了变量m_editSummand的值,则通过CAddition的DoDataExchange()函数也可以将新的变量值显示到被加数的编辑框中。但是这种数据交换机制中,DoDataExchange()并不是被自动调用的,而是需要我们在程序中调用CDialogEx::UpdateData()函数,由UpdateData()函数再去自动调用DoDataExchange()的。
8.
CDialogEx::UpdateData()函数的原型为:
BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
参数:bSaveAndValidate用于指示数据传输的方向,TRUE表示从控件传给变量,FALSE表示从变量传给控件。默认值是TRUE,即从控件传给变量。返回值:CDialogEx::UpdateData()函数的返回值表示操作是否成功,成功则返回TRUE,否则返回FALSE。
9.
我们可以通过:1.项目 --> Class Wizard 2.右键 --> 添加事件处理程序 3.右侧属性 --> 控件事件 4.双击按钮
添加一个函数:
void CAdditionDlg::OnBnClickedAddButton() { // TODO: 在此添加控件通知处理程序代码 }
10.
然后我们要做的是:把控件中的值传给相关变量,计算出结果后把值再传给控件(显示出来)。
void CAdditionDlg::OnBnClickedAddButton() { // 将各控件中的数据保存到相应的变量 UpdateData(TRUE); m_editSum = m_editSummand + m_editAddend; // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值 UpdateData(FALSE); // TODO: 在此添加控件通知处理程序代码 }