VC++MFC中的UpdateData函数

本文详细介绍了使用MFC进行程序开发时,如何通过UpdateData函数与对话框控件进行数据交换,以及理解其背后的工作原理。通过对比账户1的源代码,作者迅速完成了账户2的仿制工作,并分享了在学习过程中的心得与体会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         <May17,2015>

         周日的阳光没那么美好,一起床就漫天乌云。写完高数作业后就开始了自己的MFC专研之旅。

         打开C++老师给我们的作业,是一道简单的银行管理吧,老师给的页面如下:


这界面给我的感觉还是挺先进的,毕竟之前一直看的都是命令行,如下:

 

任务6要求:仿照账户1,完成账户2。

= = ,要求就这么简单,来看看老师给的关键实现代码。

 

// bankDlg.cpp : implementation file

//

 

#include "stdafx.h"

#include "cmath"

#include "bank.h"

#include "bankDlg.h"

 

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

 

/

// CAboutDlg dialog used for App About

 

class CAboutDlg : public CDialog

{

public:

         CAboutDlg();

 

// Dialog Data

         //{{AFX_DATA(CAboutDlg)

         enum{ IDD = IDD_ABOUTBOX };

         //}}AFX_DATA

 

         //ClassWizard generated virtual function overrides

         //{{AFX_VIRTUAL(CAboutDlg)

         protected:

         virtualvoid DoDataExchange(CDataExchange* pDX);   // DDX/DDV support

         //}}AFX_VIRTUAL

 

// Implementation

protected:

         //{{AFX_MSG(CAboutDlg)

         //}}AFX_MSG

         DECLARE_MESSAGE_MAP()

};

……..

void CBankDlg::OnButton4()

{

         //TODO: Add your control notification handler code here

    UpdateData(TRUE);//从窗口编辑框中读入数据

          //if(psa0) delete psa0;

          //psa0=newSavingsAccount(m_lastDate1,m_id1,m_rate1);

          sa0.setId(m_id1);

          sa0.setlastDate(m_lastDate1);

          sa0.setRate(m_rate1);

          sa0.initBalance();

    m_balance1=sa0.getBalance();

    m_note1="恭喜您,账号1开户成功!";

          UpdateData(FALSE);

}

 

void CBankDlg::OnButton1()

{

         //TODO: Add your control notification handler code here

         UpdateData(TRUE);//从窗口编辑框中读入数据

         sa0.deposit(m_lastDate1,m_amount1);

         m_balance1=sa0.getBalance();

         m_note1="恭喜您,账号1存款成功!最新余额请看对应信息!";

   UpdateData(FALSE);

}

 

void CBankDlg::OnButton2()

{

         //TODO: Add your control notification handler code here

         UpdateData(TRUE);//从窗口编辑框中读入数据

         intstate;

         state=sa0.withdraw(m_lastDate1,m_amount1);

         m_balance1=sa0.getBalance();

         if(state)

         m_note1="恭喜您,账号1取款成功!最新余额请看对应信息!";

         else

                   m_note1="很遗憾,余额不足,账号1取款失败!";

   UpdateData(FALSE);

}

 

void CBankDlg::OnButton3()

{

         //TODO: Add your control notification handler code here

         UpdateData(TRUE);//从窗口编辑框中读入数据

         sa0.settle(m_lastDate1);

         m_balance1=sa0.getBalance();

   m_note1="结息成功!最新余额请看对应信息!";

   UpdateData(FALSE);//更新界面的显示

}

……..

 

         关于上面的UpdateDate()的作用,我后来在孙鑫的《VC++深入详解》看见。它的作用是调用一个BankDlg.cpp中的一个DoDataExchange函数,这个函数的功能是完成在编辑框控件数据的与变量的交换。但在程序打代码中从来不直接调用这个函数,而是通过CWnd类的另一个成员函数:UpdateData来调用。通过调用后这来初始化对话框控件或从对话框获取数据。也就是说,为了数据交换生效,就必须调用DoDataExchange函数,但程序代码不是直接调用这个函数而是需要去调用UpdateData这个函数。后者具体如下声明形式:

         BOOLUpdateData (BOOL bSaveAndValidate = TRUE);

         UpdateData函数有一个BOOL类型的参数。如果其值为TRUE,则说明该函数正在获取对话框数据;如果其值为FALSE,则说明该函数正在初始化对话框的控件。

         (上面对UpdateData的接受也是来源于孙鑫的《VC++深入详解》)、

         看到这里,我才发现老师给我们的代码是最简单的访问控件的方式,就是将编辑框分别于对话框类的成员变量相关联,然后通过这些变量来检索和设置编辑框的文本。为了将对话框与类的成员变量相关联,需要利用ClassWizard来帮助我们完成。账户1的相关成员变量关联如下图:

        

         仿照账户1的源代码和对UpdateData的理解,很快的完成了这次作业。

         这里我最想记下来的就是UpdateDate调用DoDateExchange的这种机制,起初接触MFC的时候我妄想在代码中加入诸如 m_Edit1 = = 45..此类的语句就能完成编辑框的输入与显示,但是,现在我发现我想得太简单。首先,编辑框控件内的内容是字符串类型,而代码中的45为整数型,转换上就行不通。不过可以使用相关的函数完成转换后赋值,在日后的学习中慢慢积累吧!

        

         

参考资源链接:[VC++6.0 MFC简单计算器教程:构建基于对话框的运算器](https://wenku.youkuaiyun.com/doc/8947tad486?utm_source=wenku_answer2doc_content) 在VC++ MFC对话框应用程序中,实现包含三角函数和对数运算的计算器涉及多个步骤,关键在于理解如何处理消息响应以及如何调用标准库中的数学函数。首先,确保你的对话框模板已经设计好,并且具有输入编辑框和对应的运算按钮。接着,根据MFC的消息映射机制,为每个运算按钮关联一个消息响应函数。例如,如果你有一个名为“sin”的按钮,你需要在类中添加如下消息映射和处理函数: ```cpp // 消息映射宏 ON_BN_CLICKED(IDC_BUTTON_SIN, &CYourDialog::OnBnClickedButtonSin) // 处理函数定义 void CYourDialog::OnBnClickedButtonSin() { UpdateData(TRUE); // 从编辑框读取数值到变量m_EDIT1_NUM double result = sin(m_EDIT1_NUM); // 调用sin函数进行三角运算 UpdateData(FALSE); // 将运算结果写回编辑框 // 对于对数运算也是类似的过程,使用log函数 } ``` 对于对数运算,你可能会使用`log`或`log10`函数来实现自然对数或常用对数的计算。特别要注意的是,当使用对数函数时,要确保对数底数不为零或负数,否则运算将产生数学错误。 在实现阶乘运算时,由于MFC标准库中没有直接的阶乘函数,你需要自己编写一个函数来计算阶乘。这个函数可以迭代地计算阶乘值,但要注意整数溢出的问题,对于大数值可能需要使用浮点数来存储结果。 整体而言,理解MFC的消息处理机制,掌握基本的数学函数调用,以及注意数据类型的选择和范围,是完成这一项目的关键。此外,为了更好地掌握这些技能,建议阅读《VC++6.0 MFC简单计算器教程:构建基于对话框的运算器》这一教程,它将带你逐步构建起一个完整的MFC对话框计算器,并涵盖从基础到高级的各类功能实现。 参考资源链接:[VC++6.0 MFC简单计算器教程:构建基于对话框的运算器](https://wenku.youkuaiyun.com/doc/8947tad486?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值