CDocManager のカスタマイズ

[戻る]
シャノン 2004/11/02(火) 11:00:18
VC++ 7.1 / MFC です。

毎度お世話になっております。よろしくお願いします。

MFC でファイルオープン/セーブ周りのことをカスタマイズしようとすると、
CDocManager を継承してカスタマイズするのが美しいように思えます。

たとえば
http://hp.vector.co.jp/authors/VA007799/tips/tips2.htm
http://diary.moe.gr.jp/?000118#18_2_3
こういうケース。

が、CDocManager のインスタンスを作っている CWinApp::AddDocTemplate が
virtual でないので、ここをいじることができません。

そこでふと気づいてみると、CWinApp::InitApplication の中で、
CDocManager::pStaticDocManager が NULL でなければ、それを m_pDocManager
として使うようにするコードが見られます。
あらかじめここにカスタム DocManager のポインタを入れておけば、カスタマイズ
できそうですが、こういうことをしちゃっていいものなのかどうか…。

MFC のソースを検索すると、pStaticDocManager にインスタンスを作っているのは
CDocTemplate のコンストラクタだけです。
が、真っ当に行けばコイツが呼ばれるのは InitApplication より後のはず。

この pStaticDocManager 、および関連してるらしい CDocManager::bStaticInit は
何のためにあるのか、どう使われるのかご存知の方はいらっしゃいませんでしょうか?

シャノン 2004/11/02(火) 11:17:53
http://search.acty-net.ne.jp/mfc_search/archive/2001-2/msg02381.html

> CMyApp::InitInstance() 内で、かつ AddDocTemplate() がよばれる
> 前に以下の行を挿入すればOKです。
>    m_pDocManager = new CMyDocManager;

これだけの話なんだろうか…。

古いスレッドには追加発言できません。