私はMFCのC++でペイントアプリケーションを構築しました。 "Shape"を継承するクラスのすべてのシリアライゼーションが機能します。 (楕円、円、長方形)。これは、直列化呼び出す関数である異なるメンバで継承したクラスをシリアル化するMFC C++
void Shape::Serialize(CArchive& archive)
{
// call base class function first
// base class is CObject in this case
CObject::Serialize(archive);
// now do the stuff for our specific class
if (archive.IsStoring())
archive << start.x << start.y << end.x << end.y << innerColor << outerColor << thick << style;
else
archive >> start.x >> start.y >> end.x >> end.y >> innerColor >> outerColor >> thick >> style;
}
: これは、形状の直列化FUNCある
void CPaintDlg::SaveScreen()
{
CFile file(L"FILE.$$", CFile::modeWrite | CFile::modeCreate);
CArchive ar(&file, CArchive::store);
Shapes.Serialize(ar);
}
が、これはアンシリアライズと呼ばれる場所である:
void CPaintDlg::LoadScreen()
{
try
{
CFile file(L"FILE.$$", CFile::modeRead);
CArchive ar(&file, CArchive::load);
Shapes.Serialize(ar);
}
catch (...)
{
AfxMessageBox(_T("Some thing went wrong"));
}
InvalidateRect(&rect);
}
イム保持a CTypedPtrArray<CObArray
、Shape *>はShapesを呼び出し、imはこの配列のすべてのインデックスから関数funcを呼び出します。 私はFreedDraw
という名前の別のクラスをShapeから派生させています。このクラスはShapeが持っていないメンバを持ち、メンバはPointsと呼ばれています。 (画面上のフリー描画のすべての点を含むベクトル)。
すべてのクラスでは、私はDECLARE_SERIAL(FreeDraw)
を宣言したとのcppファイルIMPLEMENT_SERIAL(FreeDraw, Shape, 1)
に私はこのベクトルとどのように私の存在していたシリアル化機能とそれをマージするをシリアル化し、アンシリアライズする方法は考えています。
もっとコードを表示してください。 –
追加コード – Benny67b
[MFCでのシリアル化](https://msdn.microsoft.com/en-us/library/6bz744w8.aspx)は必須の読み取りです。 [TN002:Persistent Object Data Format](https://msdn.microsoft.com/en-us/library/32wxt301.aspx)も理解してください。 – IInspectable