VC++MFC中的UpdateData函数

来源:互联网 发布:上海大数据交易中心 编辑:程序博客网 时间:2024/06/06 05:52

         <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为整数型,转换上就行不通。不过可以使用相关的函数完成转换后赋值,在日后的学习中慢慢积累吧!

        

         

0 0
原创粉丝点击