STEP1:修改该类,从CObject 继承
class CGraph:public CObject
STEP2:实现void CGraph::Serialize(CArchive& ar)函数
STEP3:类中实现一个空的构造函数
STEP4:在类开始处增加支持串行化的宏 DECLARE_SERIAL(CGraph)
STEP5:定义类的版本号 IMPLEMENT_SERIAL(CGraph, CObject, 1 )
具体实现代码:
类定义:
class CGraph:public CObject
{
DECLARE_SERIAL(CGraph)
public:
void Draw(CDC* pDC);
CPoint m_ptOrigin;
CPoint m_ptEnd;
UINT m_nDrawType;
CGraph();
CGraph(UINT m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd);
void Serialize(CArchive& ar);
virtual ~CGraph();
};
实现文件:
IMPLEMENT_SERIAL(CGraph, CObject, 1 )
CGraph::CGraph()
{
}
CGraph::CGraph(UINT m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd)
{
this->m_nDrawType=m_nDrawType;
this->m_ptOrigin=m_ptOrigin;
this->m_ptEnd=m_ptEnd;
}
CGraph::~CGraph()
{
}
void CGraph::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
ar<<m_nDrawType<<m_ptOrigin<<m_ptEnd;
}
else
{
ar>>m_nDrawType>>m_ptOrigin>>m_ptEnd;
}
}
void CGraph::Draw(CDC *pDC)
{
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *pOldBrush=pDC->SelectObject(pBrush);
switch(m_nDrawType)
{
case 1:
pDC->SetPixel(m_ptEnd,RGB(0,0,0));
break;
case 2:
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(m_ptEnd);
break;
case 3:
pDC->Rectangle(CRect(m_ptOrigin,m_ptEnd));
break;
case 4:
pDC->Ellipse(CRect(m_ptOrigin,m_ptEnd));
break;
}
pDC->SelectObject(pOldBrush);
}
串行化保存数据:
CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBrush);
switch(m_nDrawType)
{
case 1:
dc.SetPixel(point,RGB(0,0,0));
break;
case 2:
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
break;
case 3:
dc.Rectangle(CRect(m_ptOrigin,point));
break;
case 4:
dc.Ellipse(CRect(m_ptOrigin,point));
break;
}
CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,point);
//m_obArray.Add(pGraph);
CGraphicDoc *pDoc=GetDocument();
pDoc->m_obArray.Add(pGraph);
串行化读取数据:
int nCount;
//nCount=m_obArray.GetSize();
nCount=pDoc->m_obArray.GetSize();
for(int i=0;i<nCount;i++)
{
//((CGraph*)m_obArray.GetAt(i))->Draw(pDC);
((CGraph*)pDoc->m_obArray.GetAt(i))->Draw(pDC);
}
===========================================================