こんにちは (WinXP VS.Net 2003 MFC-MDI)
過去ログを「上書き保存」で調べましたが、
良い解答が見つからなかったので質問させていただきます。
名前を付けて保存の場合は下記の方法で実現できました。
void
CMapEditView::OnFileSaveAs()
{
CFileDialog dlg( FALSE, // セーブ用ダイアログ
.dat, // 拡張子
GetDocument()->GetTitle(), // デフォルトタイトル
OFN_OVERWRITEPROMPT, // 上書き確認
DAT Files(.dat)|*.dat|| // ファイルの種類
);
if( dlg.DoModal() != IDOK ) return;
// Serialize
CFile file( dlg.GetPathName(), CFile::modeWrite | CFile::modeCreate );
CArchive ar( &file, CArchive::store );
GetDocument()->Serialize( ar );
}
次に上書き保存を実装したいと思い、動作は↓の様にしようと思っています。
・セーブが初めてなら上記のような処理。
・セーブしたことがあるのなら上書き。
ここに来て、セーブの有無を調べる方法がわからなかったので質問させて頂きました。
何かよい方法があったのなら、どうぞご教授お願いします。
セーブの有無も一緒に記憶すればいいのでは?
MFCはよくわからんのですが、
上書きフラグのようなものを持たせればいいのではないでしょうか?
今回は view での処理のようなので、
1. CMapEditView クラスに上書きフラグ変数を追加して、
OnInitialUpdate関数内で初期化。
2. ファイル読込 & 保存時に上書きフラグを立てる。
3. OnFileSave関数(なのかな?)でフラグをチェックし、
フラグが立っていなければ OnFileSaveAs関数をコールして終了。
のような流れにするといいのではないでしょうか?
# MFCにそのような関数が用意されているかもしれないので、
# 最良の方法ではないかもしれません。
発言した直後にそれっぽいのがありました・・・
CDocument::GetPathName 関数が使えそうな感じがしますね。
if (GetDocument()->GetPathName() == NULL)
OnFileSaveAs();
みたいな感じで。
間違えました;;
CDocument::GetPathName は空の文字列を返すんですね・・・。
お恥ずかしい;;
if (strcmp(GetDocument()->GetPathName(), ") == 0)
OnFileSaveAs();
こんな感じですかね。
> ・セーブが初めてなら上記のような処理。
> ・セーブしたことがあるのなら上書き。
MFCなら、何もしなくてもこのように動作しませんか?
会さん、U-tさんお早いレスありがとうございます。
>>セーブの有無も一緒に記憶すればいいのでは?
>>上書きフラグのようなものを持たせればいいのではないでしょうか?
やはりフラグが手っ取り早いでしょうか。
何か関数があったらいいな、や
IsModified()とかに騙されつつ…(これは変更うんぬんですね^^;)
とりあえずフラグ用意してやってみます!
皆様ありがとうございました。解決しておきます~☆
あわわ、書き込んでる最中にレスが^^;
解決いれちゃいました_no
U-tさん、dairygoodsさんありがとうございます。
>>MFCなら、何もしなくてもこのように動作しませんか?
とのことですが、下記を付け足すことで動作するということでしょうか?
ON_COMMAND( ID_FILE_SAVE, CWinApp::OnFileSave )
まだ試していませんので、ちょっとやってみますね^^
上の発言はちょっと勘違いかも…
CMapEditView::OnFileSave()の中で普通にセーブしようとすれば、
初ならダイアログがでてってことでしょうか?
なにはともあれやってみます!
U-tさんのやり方も試してみましたが、空文字列しか返ってきませんでした(なんでだろう^^;
一応、下記のコードで無事動作しました!
ViewクラスよりDocumentクラスの方がやり易そうだったので移してやってみました。
void
CMapEditDoc::OnFileSave()
{
CDocument::OnFileSave();
}
しかし、また新たな問題が現れました。
ダイアログの中の「ファイルの種類」のところが「All Files」になってしまいます。
上記のコードに何かを付け足す事でファイルのフィルターは変えられるのでしょうか?
自分でも探してみますが、何かご指摘ありましたらよろしくお願いします。