画像データは、直線の個数と m_lineIndex と座標データ m_points[100][2] のみです。このようなデータをファイルに保存するためには Document クラスの Serialize( ) 関数を用いる。
////////////////////////////////////////////////////////////////////// |
// CLine1Doc シリアライゼーション |
void CLine1Doc::Serialize(CArchive& ar) |
{ |
if (ar.IsStoring()) |
{ |
// TODO: この位置に保存用のコードを追加してください。 |
ar m_lineIndex; |
for(int i=0; i m_lineIndex; i++){ |
ar m_points[i][0]; |
ar m_points[i][1]; |
} |
} |
else |
{ |
// TODO: この位置に読み込み用のコードを追加してください。 |
ar m_lineIndex; |
for(int i=0; i m_lineIndex; i++){ |
ar m_points[i][0]; |
ar m_points[i][1]; |
} |
} |
} |
Serialize( ) 関数のパラメータはアーカイブ (文書) 型のクラスへのポインター ar である。アーカイブが保存用か、読み込み用かを調べるためには IsStoring( ) を使う。 C 言語の標準入出力には printf, scanf を使用するが、C++ では入出力演算子 , を使用する。
C 言語では , は 2 進表示したときの 桁ずらしの命令 (シフト命令) で使用され、C++ では C 言語の命令も使用することができるから、 , には 2 重の意味があることになる。 C++ では同一の演算子、関数に複数の意味を持たせる(多重定義)ことができるが、当然前後関係から区別がつかないといけない。
またプログラム中で変数 i を使用するときに、初めて i が整数型の変数であることを宣言している箇所がある。このような構文は C 言語では当然文法エラーとなるが、 C++ では必要な場所で型宣言をするようになっている。 以上でプログラムを起動したときにファイル/名前をつけて保存、 ファイル/開く... などのメニューが有効となる。