電子書籍の厳選無料作品が豊富!

MFCのCDocumentクラスが認識しているファイル名を、ドキュメントの内容を保持したまま初期化する(OnNewDocumentを実行した直後の"untitled"の状態に戻す)方法をご存じの方、教えてください。

テンプレートファイルからドキュメントの雛型を読み込んで、編集/新規ファイルに保存するアプリを作りたいのです。

テンプレートファイルを読み込んだ時点でCDocumentが認識するドキュメントファイル名はテンプレートのファイル名になってしまいます。そのまま保存されると困るので、ドキュメントの内容は保持したまま"untitled"に戻したいと考えています。

SetPathName("")だと、エラーが発生してしまいます。MFCのソースを読むと、SetPathNameは、渡されたファイル名を絶対パス表現に書換えようとしており、それに失敗するとエラーを発生させる仕様になっているようです。バージョンはVC++ 2003です。

なお、通常のファイル(テンプレートではないファイル)を読み込んで編集/保存する、という動作もするので、OnFileSaveの動作を殺してOnFileSaveAsしか動作しないようにする事によってテンプレートファイルへの上書きを防止する、という方法は不可です。

A 回答 (1件)

ちょっとスマートじゃありませんが、


m_strPathNameを空にして
m_bModifiedをFALSE?う~んテンプレートを読み込んで初期化した状態だからTRUEか?まーすきなほうで^^;
m_strTitleをuntitledにしてあげればいいんじゃないでしょうか?
確認したのがVC6のDOCCORE.cppだったので多少違うかもしれませんが・・・
あーあと気を付けないといけないのが、タイトルを変更してあげるのをメンバ変数直接やる場合、UpdateFrameCounts()などを呼び出して画面表示をリフレッシュしてあげないといけませんね~
    • good
    • 0
この回答へのお礼

m_strPathNameがEmptyの場合、SetPathNameはASSERTするようになっていたので、空にしてはいけないものだと決めつけていたのですが、動いちゃいました。

m_strPathName.Empty();
m_strTitle.LoadString(AFX_IDS_UNTITLED);
UpdateFrameCounts();

これでいいみたいです。
ありがとうございました。

お礼日時:2006/10/06 21:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!