MFC界面编程基础(21):一个简单的CArchive类用法的示例(Ex_Archive)

上一篇:MFC界面编程基础(20):一个简单的文档序列化示例(Ex_SDIArchive)下一篇:MFC界面编程基础(22):MFC ODBC连接数据库
  • 第一步 用MFC 应用程序向导创建一个默认的基于对话框的应用程序Ex_Archive。
  • 第二步 为新创建的工程添加一个新的.h文件, Person.h,单击【添加】按钮,如下图所示。在Person.h文件中输入下面的代码:
class CPerson : public CObject
{
	DECLARE_SERIAL(CPerson)
public:
	virtual void Serialize(CArchive& ar);
	CPerson();  	
	virtual ~CPerson();

	UINT Load(void);
	CString m_szName ;
	UINT m_nAge;
};

在这里插入图片描述

  • 第三步 同上步,在项目中添加源文件Person.cp,在Person.cpp文件中输入下面的代码:
#include "stdafx.h"
#include "Person.h"
IMPLEMENT_SERIAL(CPerson, CObject, 1)
CPerson::CPerson()
{    }
CPerson::~CPerson()
{    }
void CPerson::Serialize(CArchive& ar) 
{
	if (ar.IsStoring())			
	{
		ar<<m_szName<<m_nAge;
	}
	else
	{
		ar>>m_szName>>m_nAge;
	}
} 

UINT CPerson::Load()
{
	CFile f;
	char buf[512];
	if( !f.Open( "person.dat", CFile::shareDenyWrite|CFile::modeRead) ) 		
	return 0;
	else
	{
		CArchive ar( &f, CArchive::load, 512, buf );
		Serialize(ar);		
		return 1;
	}
}

**说明:**通过2、3两步建立了CPerson类,并且改类为可序列化的类,CPerson类的成员函数Load( )首先生成指向"person.dat"文件的CFile对象,然后构造读文件的CArchive对象ar,并从文件中读数据完成CPerson对象的初始化。

  • 第四步 编辑IDD_EX_ARCHIVE_DIALOG对话框资源,如下图所示。
    在这里插入图片描述
    设置上图控件的属性如下表:
    在这里插入图片描述
  • 第五步 打开MFC 类向导的成员变量页面,确定类名是CEx_ArchiveDlg,选中所需的控件ID号,双击鼠标。依次为下列控件添加成员变量,如下表所示。
    在这里插入图片描述
  • 第六步 为类CEx_ArchiveDlg添加一个CPerson类的对象m_person成员。并在Ex_ArchiveDlg.h文件的头部添加以下语句:
#include "person.h"
  • 第七步 修改CEx_ArchiveDlg的OnInitDialog()函数在该函数中添加从文件读取数据并初始化m_person的代码:
BOOL CEx_ArchiveDlg::OnInitDialog()
{
……
	if(m_person.Load())
	{
		this->m_szName=this->m_person.m_szName;
		this->m_nAge=this->m_person.m_nAge;
		this->UpdateData(FALSE);
	}
	else
	{ 
		AfxMessageBox("load person data fails");
	}
	return TRUE; 
}
  • 第八步 用MFC ClassWizard为按钮IDC_SAVE添加BN_CLICKED的消息映射,并增加下列代码:
void CEx_ArchiveDlg::OnSave() 
{
   	CFile f;
	char buf[512];
	if( !f.Open( "person.dat",CFile::modeCreate | CFile::modeWrite) )
	{
		exit( 1 );
	}
	CArchive ar( &f, CArchive::store, 512, buf );	
    UpdateData();	
	m_person.m_nAge=this->m_nAge;
	m_person.m_szName=this->m_szName;
	m_person.Serialize(ar);
}
  • 第九步 编译运行并测试。
上一篇:MFC界面编程基础(20):一个简单的文档序列化示例(Ex_SDIArchive)下一篇:MFC界面编程基础(22):MFC ODBC连接数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值