windows第十九章 文档串行化

CArchive类对文件读写操作

做一个自动保存读取的小案例

界面如下,定义好关联变量
在这里插入图片描述
2个按钮的消息

void C文档串行化Dlg::OnBnClickedButton1()
{
	UpdateData(TRUE);//获取数据

	CFile file;
	if (file.Open(_T("data.txt"), CFile::modeCreate | CFile::modeWrite) == FALSE)
		return;
	CArchive ar(&file, CArchive::store);//保存
	ar << m_name << m_sex << m_age;//保存数据
	ar.Flush();//刷新缓冲区
	ar.Close();
	file.Close();

}

void C文档串行化Dlg::OnBnClickedButton2()
{
	CFile file;
	if (file.Open(_T("data.txt"), CFile::modeRead) == FALSE)
		return;
	CArchive ar(&file, CArchive::load);//读取
	ar >> m_name >> m_sex >> m_age;//读取数据
	ar.Close();
	file.Close();
	UpdateData(FALSE);//显示数据
}

在这里插入图片描述

用CDocument简化上述操作

写一个类继承自CDocument
在这里插入图片描述

#include "pch.h"
#include "CMyDocument.h"
#include "文档串行化Dlg.h"

void CMyDocument::Serialize(CArchive& ar)
{
	auto pDlg = (C文档串行化Dlg*)AfxGetMainWnd();
	if (ar.IsStoring())
	{
		ar << pDlg->m_name << pDlg->m_sex << pDlg->m_age;
	}
	else
	{
		ar >> pDlg->m_name >> pDlg->m_sex >> pDlg->m_age;
	}
}

主窗口定义该类成员
之前的2个按钮消息改成如下

void C文档串行化Dlg::OnBnClickedButton1()
{
	UpdateData(TRUE);//获取数据
	m_doc.OnSaveDocument(L"data.txt");//保存数据
}

void C文档串行化Dlg::OnBnClickedButton2()
{
	m_doc.OnOpenDocument(L"data.txt");//读取数据
	UpdateData(FALSE);//显示数据
}

执行效果跟之前一样

利用Serialize进一步简化

Serialize是继承自CObject的,所以主窗口也能使用
Dlg.cpp添加serialize消息

void C文档串行化Dlg::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		ar << m_name << m_sex << m_age;
	}
	else
	{
		ar >> m_name >> m_sex >> m_age;
	}
}

CMydocument.cpp简化

#include "pch.h"
#include "CMyDocument.h"
#include "文档串行化Dlg.h"

void CMyDocument::Serialize(CArchive& ar)
{
	auto pDlg = (C文档串行化Dlg*)AfxGetMainWnd();
	pDlg->Serialize(ar);
}

利用文档串行化重构之前的项目,员工管理系统

这是代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yerennuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值