向控件添加变量之后,类中多了什么?

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: 在此添加控件通知处理程序代码
}

原文地址:https://www.cnblogs.com/qiangua/p/3683915.html