VC结构提序列化有关问题
VC结构提序列化问题
//记录内存中的图片数据
struct ImgRecord
{
CDBImgX dbCurImg; //导入图片对象(备份,未修改的原图片)
CDBImgX dbLoadImg;//修改后用于显示的图片对象!
CDBImgX dbBackImg;//背景图片对象
CDBImgX dbForeImg;//前景图片对象
CString pCurImg;//导入图片
CString pBackImg;//背景图片
CString pForeImg;//前景图片
CString pPostImg;//当前贴花图片
CPostManage PostMg ;//贴花管理链表
CPicGroupManage XmlMg;//记录XML信息
int MaxCount; //记录贴花图片最大数
int DateCount;//记录有几张日历
int PenCount;//画笔数
// int Angle;//记录旋转角度
// int iMirror;//记录镜面旋转次数,为奇数时需要旋转
bool bCurVail; //当前图片有效
bool bBackVail;//背景图片有效
bool bForeVail;//前景图片有效
bool bPostVail;//贴花图片有效
ImgRecord()
{
pCurImg="";
pBackImg="";
pForeImg="";
pPostImg="";
MaxCount=0;
DateCount=0;
PenCount=0;
// Angle=0;
// iMirror=0;
bCurVail=false;
bBackVail=false;
bForeVail=false;
bPostVail=false;
}
void Serialize(CArchive &ar)//增加序列化函数
{
if(ar.IsStoring())
{
char ch;//由于bool类型不支持序列化,所以用char型进行转换
// ar<<dbCurImg;
// ar<<dbLoadImg;
// ar<<dbBackImg;
// ar<<dbForeImg;
ar<<pCurImg;
ar<<pBackImg;
ar<<pForeImg;
ar<<pPostImg;
// ar<<PostMg;
// ar<<XmlMg;
ar<<MaxCount;
ar<<DateCount;
ar<<PenCount;
ch = bCurVail;
ar<<ch;
ch = bBackVail;
ar<<ch;
ch=bForeVail;
ar<<ch;
ch = bPostVail;
ar<<ch;
}
else
{
char ch;
// ar>>dbCurImg;
// ar>>dbLoadImg;
// ar>>dbBackImg;
// ar>>dbForeImg;
ar>>pCurImg;
ar>>pBackImg;
ar>>pForeImg;
ar>>pPostImg;
// ar>>PostMg;
// ar>>XmlMg;
ar>>MaxCount;
ar>>DateCount;
ar>>PenCount;
ch = bCurVail;
ar>>ch;
ch = bBackVail;
ar>>ch;
ch=bForeVail;
ar>>ch;
ch = bPostVail;
ar>>ch;
}
}
};
在结构体里面实现Serialize()函数没问题!,问题是有些读乡类型Serialize函数是不支持的,例如CDBImgX dbCurImg,请问怎么样让他支持储存。最好给出代码,谢谢!
------解决方案--------------------
自己写行不行
//记录内存中的图片数据
struct ImgRecord
{
CDBImgX dbCurImg; //导入图片对象(备份,未修改的原图片)
CDBImgX dbLoadImg;//修改后用于显示的图片对象!
CDBImgX dbBackImg;//背景图片对象
CDBImgX dbForeImg;//前景图片对象
CString pCurImg;//导入图片
CString pBackImg;//背景图片
CString pForeImg;//前景图片
CString pPostImg;//当前贴花图片
CPostManage PostMg ;//贴花管理链表
CPicGroupManage XmlMg;//记录XML信息
int MaxCount; //记录贴花图片最大数
int DateCount;//记录有几张日历
int PenCount;//画笔数
// int Angle;//记录旋转角度
// int iMirror;//记录镜面旋转次数,为奇数时需要旋转
bool bCurVail; //当前图片有效
bool bBackVail;//背景图片有效
bool bForeVail;//前景图片有效
bool bPostVail;//贴花图片有效
ImgRecord()
{
pCurImg="";
pBackImg="";
pForeImg="";
pPostImg="";
MaxCount=0;
DateCount=0;
PenCount=0;
// Angle=0;
// iMirror=0;
bCurVail=false;
bBackVail=false;
bForeVail=false;
bPostVail=false;
}
void Serialize(CArchive &ar)//增加序列化函数
{
if(ar.IsStoring())
{
char ch;//由于bool类型不支持序列化,所以用char型进行转换
// ar<<dbCurImg;
// ar<<dbLoadImg;
// ar<<dbBackImg;
// ar<<dbForeImg;
ar<<pCurImg;
ar<<pBackImg;
ar<<pForeImg;
ar<<pPostImg;
// ar<<PostMg;
// ar<<XmlMg;
ar<<MaxCount;
ar<<DateCount;
ar<<PenCount;
ch = bCurVail;
ar<<ch;
ch = bBackVail;
ar<<ch;
ch=bForeVail;
ar<<ch;
ch = bPostVail;
ar<<ch;
}
else
{
char ch;
// ar>>dbCurImg;
// ar>>dbLoadImg;
// ar>>dbBackImg;
// ar>>dbForeImg;
ar>>pCurImg;
ar>>pBackImg;
ar>>pForeImg;
ar>>pPostImg;
// ar>>PostMg;
// ar>>XmlMg;
ar>>MaxCount;
ar>>DateCount;
ar>>PenCount;
ch = bCurVail;
ar>>ch;
ch = bBackVail;
ar>>ch;
ch=bForeVail;
ar>>ch;
ch = bPostVail;
ar>>ch;
}
}
};
在结构体里面实现Serialize()函数没问题!,问题是有些读乡类型Serialize函数是不支持的,例如CDBImgX dbCurImg,请问怎么样让他支持储存。最好给出代码,谢谢!
------解决方案--------------------
自己写行不行
- C/C++ code
inline CArchive& AFXAPI operator <<(CArchive& arch, CDBImgX dbCurImg) { arch.Write(...); return arch; } inline CArchive& AFXAPI operator >>(CArchive& arch, CDBImgX& dbCurImg) { arch.Read(...); return arch; }
------解决方案--------------------
最简单的办法:
void CDBImgX::Serialize( CArchive& ar )
{
....
}
dbCurImg.Serialize( ar );