- ベストアンサー
ダイアログベースでのデータの保存について
- ダイアログベースのプログラムでデータを保存する方法を教えてください。
- 参考サイトなども教えていただけると助かります。
- 具体的な方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
CDocument~CViewでは、以下の順に関数が呼び出され、 保存ロジックが実行されます。 ■メニューから[名前をつけて保存]を選択する。 CDocument::OnFileSaveAs() CDocument::DoSave(LPCTSTR lpszPathName, BOOL bReplace) CDocument::OnSaveDocument(LPCTSTR lpszPathName) CDocumentXXX::Serialize(CArchive& ar) : CDocumentから派生したSerialize 処理の概要としては、 ・保存するファイル名の取得(ファイル名を指定するダイアログが開く) ・指定されたファイル名からCFileオブジェクトを生成 ・CFileオブジェクトからCArchiveオブジェクトを生成 ・Serialize(CArchive& ar)でデータの読み出し、または書き込み ダイアログベースのアプリのどのタイミングでデータを保存するのかは わかりませんが、以下の処理を実装すれば同様の形式でファイルへの 入出力が可能だと思います。 簡単な例です。[エラー処理は省略] void CXXXDialog::SaveData(LPCTSTR lpszFileName) { CFile file; file.Open(lpszFileName, CFile::modeCreate | CFile::modeWrite, NULL); // CFile::modeCreate | CFile::modeWrite としましたが、適切なフラグをセットしてください。 CArchive archive(&file, CArchive::store | CArchive::bNoFlushOnDelete); Serialize(archive); archive.Close(); file.Close(); } void CXXXDialog::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: この位置に保存用のコードを追加してください。 } else { // TODO: この位置に読み込み用のコードを追加してください。 } } 上記の関数を実装して、保存するタイミングで、以下のように呼び出します。 例:保存ファイル名をC:\data.txtとする。 SaveData(_T("C:\\data.txt"));
お礼
darkskyさん いつも回答ありがとうございます。 VC++でのファイル保存が始めてで、本で調べたらシリアル化のことしか載っていなかったのでこの方法を使おうと思いました。 しかしながら、C言語で普通に書けば良いとわかってのでそうしたところうまくいきました。 教えていただいたことは、今後に生かそうと思います。 どうもありがとうございました。