MFC 自定义类的序列化实现 实例 Shape类

.H:
class CShape : public CObject  
{
public:
 CShape(void);
 CShape(CShape& other);
 ~CShape(void);
 // 是否边框
 bool m_bBorder;
 // 是否填充
 bool m_bFill;
 // 边框颜色
 COLORREF m_borderColor;
 // 边框粗细
 int m_nBorderWidth;
 // 填充颜色
 COLORREF m_fillColor;
 // 中心点
 CRect m_rect;
 virtual CString getType(void);
protected:
 CString m_strType;
public:
 void Serialize(CArchive &ar);//序列化函数
 DECLARE_SERIAL(CShape)//声明序列化类
};
/
.cpp:
IMPLEMENT_SERIAL(CShape,CObject,1)//实现序列化类
CShape::CShape(void)
 : m_bBorder(false)
 , m_bFill(false)
 , m_nBorderWidth(0)
 , m_rect()
 , m_strType(_T("Shape"))
{
}
CShape::CShape(CShape& other)
{
 this->m_strType = other.m_strType;
 this->m_bBorder = other.m_bBorder;
 this->m_bFill = other.m_bFill;
 this->m_borderColor = other.m_borderColor;
 this->m_nBorderWidth = other.m_nBorderWidth;
 this->m_fillColor = other.m_fillColor;
 this->m_rect = other.m_rect;
}
CShape::~CShape(void)
{
}

CString CShape::getType(void)
{
 return m_strType;
}
void CShape::Serialize(CArchive &ar)//序列化函数的实现
{
 if(ar.IsStoring())
  //存入
  ar<<m_strType<<m_bBorder<<m_bFill<<m_nBorderWidth<<m_borderColor<<m_fillColor<<m_rect;
 else
  //输出
  ar>>m_strType>>m_bBorder>>m_bFill>>m_nBorderWidth>>m_borderColor>>m_fillColor>>m_rect;


///
使用CTypedPtrArray存储,注意数据尽量保存在DOC里面:

CTypedPtrArray<CObArray,CShape *> m_ShapeArray; 

在CDoc的Serialize 里面:
 if (ar.IsStoring())
 {
  m_ShapeArray.Serialize(ar);
 }
 else
 {
  m_ShapeArray.Serialize(ar);
 } 
 
///
数据修改后记得进行标记:
SetModifiedFlag(); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值