MFC中序列化
手动实现序列化的要点:
1.保存对象个数
2.保存对象类型
3.类提供序列化反序列化函数
MFC中序列化的五个步骤:
- 继承自CObject类
- 重写Serialize()函数
- 在类的申明中使用DECLARE_SERIAL 宏
- 定义一个无参数的构造函数(重建对象的时候要用)
- 在cpp文件中添加IMPLEMENT_SERIAL宏
如果类没重载<<和>>,可自行调用 ar.Write(&m_pen, sizeof(m_pen));和ar.EnsureRead(&m_brush, sizeof(m_brush));
void IShape::Serialize(CArchive &ar) {
if (ar.IsStoring()) {
// TODO: 在此添加存储代码
ar << m_ptBegin << m_ptEnd;
ar.Write(&m_pen, sizeof(m_pen));
ar.Write(&m_brush, sizeof(m_brush));
}
else {
// TODO: 在此添加加载代码
ar >> m_ptBegin >> m_ptEnd;
ar.EnsureRead(&m_pen, sizeof(m_pen));
ar.EnsureRead(&m_brush, sizeof(m_brush));
}
}
二.MFC中要序列化的类放在doc类中,在view类中通过GetDocument()->GetLstShapes();访问
void CMFCApplication1View::OnInitialUpdate() {
CView::OnInitialUpdate();
m_pLstShapes = GetDocument()->GetLstShapes();
// TODO: 在此添加专用代码和/或调用基类
}