エディタを作成しています。
Aというファイルを読み込んでいる時、
表面上、Bファイルに変更をしているように見せたいのです。
編集をして新規作成が押された時、「Aを上書きしますか?」という
メッセージがでますが、
これを「Bを上書きしますか?」というようにし、OKが出されたら
Bに保存するという流れです。
保存や、×ボタンはSetPathName()を使用して
パスを変更できたのですが・・・
MFCのソースを見てCWinApp::OnFileNew()でメッセージを出しているのはわかりました。
この前にパスを変更したいのですが、どのようにするかが分かりません。
AppクラスでCDocument::SetPathNameのような動作をしたいのです。
ソースはこんな感じですが、できるでしょうか?
void CXXXApp::OnFileNew()
{
//ある条件の時、
if(flg == 1){
//ドキュメントのパス名を変えたい
}
CWinApp::OnFileNew();
}
環境はVC6.0、Win2000、MFCです。
何をされたいのかよくわかりませんが、それは
SetModifiedFlag(TRUE)とすることで、呼ばれます。
IsModified()でTRUEかどうかを確認できますので、
それを利用し、もともとのメッセージを出したくないのでしたら、
SetModifiedFlag(FALSE)してしまえばいいです。
Daisukeさんお返事ありがとうございます。
MFCのソースを見たのですが、
CWinApp::OnFileNew()の中を追っていくと、SaveModified()を呼んで
その中でメッセージボックスを呼んでいます。
ですのでその前に(CWinApp::OnFileNew()の前)に、ドキュメントの
パス名を変えることはできないのでしょうか?
やりたいことは、
1.読み込み時にファイルの判別
(Aが読み込まれたらflgを1にする)
CMainFrame::OnUpdateFrameTitle()でタイトルはBに見せる。
2.編集され「新規作成」がされたら、「Aへの変更を保存しますか?」
ではなく、「Bへの変更を保存しますか?」とする。
OKがされたらBに保存。
ですのでSetModifiedFlag(FALSE)にしたいのではなく、
ドキュメントのパス名を変更したいのです。
かなり変な処理なのでわかりにくいと思います。
こんな説明で分かりますでしょうか?
答えは自分で書いてたようです。
>CWinApp::OnFileNew()の中を追っていくと、SaveModified()を呼んで
SaveModified()をオーバーライドして、そこで判別して
SetPathName()で解決できそうです。
最近ようやくオーバーライドが使えるようになりました。
おさがわせしました。