单文档及文档的序列化

3 篇文章 0 订阅
2 篇文章 0 订阅
1、	建一个单文档的项目:文档;
2、	写一个画直线、矩形、椭圆的代码;
3、	建一个MFC的类CGraph基于CObject;
4、	在Graph.h中加:
CGraph(int,CPoint,CPoint);
DECLARE_SERIAL(CGraph)
int m_nType;
CPoint m_ptOrigin;
CPoint m_ptEnd;
5、	在Graph.cpp中写:
CGraph(int,CPoint,CPoint);
DECLARE_SERIAL(CGraph)//加入系列化宏
int m_nDrawType;
	CPoint m_ptOrigin;
	CPoint m_ptEnd;
6、	在文档Doc中添加成员变量m_obArray基于CObArray;
7、	在文档View.cpp中的OnLButtonUp中加:
CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,m_ptEnd);
	GetDocument()->m_obArray.Add(pGraph);
8、	在文档View.cpp中加:#include”Graph.h”
9、	在文档View.cpp中的Ondraw中加:
void CDrawingView::OnDraw(CDC* pDC)
{
	CDrawingDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO: 在此处为本机数据添加绘制代码
	if (pDoc->m_obArray.GetSize())
	{
		for (int i=0;i<pDoc->m_obArray.GetSize();i++)
		{
			((CGraph*)pDoc->m_obArray.GetAt(i))->DrawGraph(pDC);
		}
	}
}
10、	在Graph上加成员函数:void DrawGraph(CDC * pDC)
11、	在Graph中的DrawGraph中写:
void CGraph::DrawGraph(CDC * pDC)
{
	switch(m_nDrawType)
	{
	case 1:
		pDC->MoveTo(m_ptOrigin);
		pDC->LineTo(m_ptEnd);
		break;
	case 2:
		pDC->Rectangle(CRect(m_ptOrigin,m_ptEnd));
		//		dc.Rectangle(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptEnd.y);
		break;
	case 3:
		pDC->Ellipse(CRect(m_ptOrigin,m_ptEnd));
		//		dc.Ellipse(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptEnd.y);
		break;
	}
}
12、	在Graph中加成员函数:void Serialize(CArchive &ar)
13、	在Graph的Serizlize中写:
void CGraph::Serialize(CArchive &ar)
{
	if (ar.IsStoring())
	{
		ar<<m_nDrawType<<m_ptOrigin<<m_ptEnd;
	}
	else
	{
		ar>>m_nDrawType>>m_ptOrigin>>m_ptEnd;
	}
}
14、在文档Doc.cpp中写:
void CDrawingDoc::Serialize(CArchive& ar)
{
// 	if (ar.IsStoring())
// 	{
// 		// TODO: 在此添加存储代码
// 	}
// 	else
// 	{
// 		// TODO: 在此添加加载代码
// 	}

	m_obArray.Serialize(ar);
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值