- 第一步 用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);
}