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

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

A 回答 (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()周辺を書き換えてください
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/06 08:09

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