1. 程式人生 > >MFC介面程式設計基礎(21):一個簡單的CArchive類用法的示例(Ex_Archive)

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連線資料庫