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);
}
单文档及文档的序列化
最新推荐文章于 2023-05-07 16:01:01 发布