• ベストアンサー

MRUの一時回避 VC++2008 MFC

お世話になります。 VC++ 2008 MFCでSDIアプリを作成しています。 OnSaveDocumentをオーバーライドしてデータを書き込んでいますが、 特別な場合のみMRUへの登録をしないようにしたいと思います。 どのようにすればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BLK314
  • ベストアンサー率55% (84/152)
回答No.1

MRUへの登録はMFCのソースをみますと CDocument::DoSave(LPCTSTR lpszPathName, BOOL bReplace) 内の最終段階で行っています。 SetPathName(newName); をコールしており CDocument::SetPathName(lpszPathName, bAddToMRU) に制御が渡ります virtual void SetPathName(LPCTSTR lpszPathName, BOOL bAddToMRU = TRUE); と宣言されていますので、bAddToMRUのデフォルトはTRUEです。 従って、CDocument::DoSave(LPCTSTR lpszPathName, BOOL bReplace) 内の SetPathName(newName); を「特別な場合]のみ SetPathName(newName, FALSE); にする必要があります。 CDocument::DoSave(LPCTSTR lpszPathName, BOOL bReplace) は仮想関数であり派生クラスで書き換え可能です。 MFCのソースから CDocument::DoSave(LPCTSTR lpszPathName, BOOL bReplace) の実装の全部をコピーし 派生クラスのDoSave(LPCTSTR lpszPathName, BOOL bReplace) にペースト後 最後のSetPathName()周辺を書き換えてください

sekinegoo
質問者

お礼

ご丁寧な説明ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プロジェクトのVC6からVC9の移行時のエラー

    現在、VC6で作成したプロジェクトをVC9に移行しています。 そこで、Debug版でコンパイルするとリンク時に下記エラーがでます。 //下記が、エラー内容 1>LINK : fatal error LNK1104: ファイル 'mfc42d.lib' を開くことができません。 Release版でコンパイルすると発生しません。 他の質問で同じような内容がありましたが、その対策内容を実行しようとするも、よく解りませんでした。 //////////////下記が参考にした解決策等////////////////////////////////// 今試しにVC6で・MFCアプリ(DLL共有) ・SDIアプリ・そのほかはデフォルトという条件で作って、VC2005 Proに変換してみたところ、問題なくコンパイル/リンクまでできました。もしかしてプロジェクトの中(ソリューションのツリーの中)に明示的にmfc42d.libを登録しているということはありませんか?vcのプロジェクトは"プロジェクト名.vcproj"で、単なるテキストファイルなので、その中もよく見てください。 /////////////////////////////////////////////////// 他に解決策はありますか?

  • VC++6.0 MFCダイヤログベースでの画像処理

    初心者です。 VC++6.0 MFCダイヤログベースのアプリケーションで、ビットマップ画像を生成表示するにはどうしたらよいでしょうか。 MFC-SDIでは経験があります。 例題と扱っているサイトありましたら、紹介願います。

  • VC++2003でMFCアプリを作成しています。

    自分である拡張子のファイルを読み込んだ際に、ファイルオープンに成功した場合のみタイトルバーを更新したいのですが、どうしたらいいでしょうか? SDIで開発しているのですが、既存のままだと読み込んだ時点でタイトルバーが更新されているようです。 どこでタイトルバーを変えているか教えていただけませんでしょうか?また、その部分をオーバーライドするという意識で間違いないでしょうか?

  • mfc vc++2005 で構成が正しくない・・・

    vc++2005 mfcで作成したプログラムで上記が出て他のPCで動きません。 mfc以外はファイルのコピーをするとかだけの単純なツールなのでmfcが 悪さしているとは思います。 mfcをスタティックでリンクにして、コード生成のところのマルチスレッドDLLを マルチスレッドに変えるとやはりいけますが、別にあったwindows7ではmfcと コード生成のところを変えなくても問題なくいけました。 vc++2005 redistributable パッケージを入れても変わりません。 mfcは別物なのでしょうか?? ネットを見ているとredistributableパッケージを入れれば大丈夫!!という 感じなのですが。 すいませんがどなたかご教授ください。

  • [VC++][MFC][SDI]ダイアログコントロールもしくわツールバー!!詰まってます!!

    現在VC++6.0でMFCを使いSDIのプログラムを作っているのですが、フォームにダイアログバーを張っています。 これをツールバーのように自由に動かしたり、左右上下にドッキングさせたり。 これって実現可能でしょうか? 色々ためしてみたんですが無理でした。 やっぱ不可能ですかね? これが無理なんであればデフォルトで作成されるツールバー([新規作成][開く][保存]等が入ってる)にコントロール(ボタンやリストボックス)を追加して使用、と考えているのですがこれも難しい!!! まだまだ未熟者なのですがどうかご存知の方おられましたらご教授ください!! よろしくお願いします!!

  • ウインドウのビューをリストビューにするには?(VC++6.0)

    VC++6.0 MFCにて MFC AppWizardにてプロジェクトを作成します。 SDIを選択し、後はデフォルトのままです。 そうやって作ったベースとなるコードを実行すると、 普通にウインドウが開きます。(当然か) そのウインドウのビューをリストビューにしたいのですが、 どこにどのようなコードを書けば良いのでしょうか?

  • VC++でタスクバーに表示させない方法。(非MFC)

    VC++6.0 で常駐アプリの開発をしているのですが、 MFCを使わずにダイアログを作成し、 タスクトレイにアイコンを表示するのはできたのですが、タスクバーには表示が残ってしまいます。 タスクバーに表示させない方法を教えてください。 よろしくお願いします。

  • VC++ Windows2000 でリソースが開けない

    環境:Windows2000SP2 Visual C++ 6.0 SP5 VC++ 超初心者です。 MFCアプリウィザード(EXE)でSDIアプリケーションのスケルトンを作成し、手を加えずにビルドしましたが、エラー 「F:\…test5\test5.rc(11) : fatal error RC1015: cannot open include file 'afxres.h'.」 rc.exe の実行エラー が出て実行できません。 また、リソースウィンドウを開いてみると、リソースが一つも表示されずにその代わりに、 「ロードに失敗しました」と表示されています。 VC++をWindows2000で使用する場合には、何かしなければいけないのでしょうか?

  • VC++とVC#の違いを教えて下さい

    VC++とVC#どちらを勉強したほうが就職に有利でしょうか VC++とVC#何がちがうのでしょうか。 VC++は主に業務系アプリを作成するときに使う言語で VC#は主に制御系アプリを作るときに作成する見たいな 違いも教えて下さい。

  • アプリ起動時にダイアログも開くには?

    <環境> WIN98 VC++6.0 MFC SDIにて アプリ起動時に、SDIは非表示にしているおり、さらに同時にダイアログも非表示で開きたいのですが、ダイアログのコードはどこに書けばよいのでしょうか?