OnOpenDocumentやSerializeが呼ばれない

[戻る]
sizuku 2007/10/26(金) 18:41:36
VC6.0 MFCでMDI実装です。
タイトルの通り、OnOpenDocumentやSerializeが呼ばれずに困っています。
一度、ファイルを読み込んだ場合はこれらの関数が呼び出されるのですが、
同名のファイル名をもう一度読み込んだ場合は、関数が呼び出されません。
この現象を回避したいのですが、どうすればよいのでしょうか。
ご教授願います。

Kerry 2007/10/26(金) 19:10:43
CMultiDocTemplate派生クラスを作って、MatchDocTypeをオーバーライド
すれば良いと思います。

CDocTemplate::Confidence CXXXDocTemplate::MatchDocType(
    LPCTSTR lpszPathName, CDocument*& rpDocMatch)
{
    Confidence result = CMultiDocTemplate::MatchDocType(
                            lpszPathName, rpDocMatch);
    if (result == yesAlreadyOpen)
    {
        result = yesAttemptNative;
        rpDocMatch = NULL;
    }
    return result;
}

↑のコードでは新しいドキュメントをオープンするようになっていますが、
既存のドキュメントを再利用したい場合はこれを応用してください。

sizuku 2007/10/26(金) 20:41:20
レスありがとうございます。
教えていただいた情報を基にMatchDocTypeを
オーバーライドする前に、次のような問題に遭遇してしました。
まず、CMultiDocTemplateを継承したCMyDocTemplateを作成し、
CMultiDocTemplateと同じ型のコンストラクタをメソッドとして追加します。
その後、CMyDocTemplateのコンストラクタでCMultiDocTemplateのコンストラクタを
呼ぶわけですが、これでコンパイルするとデフォルトコンストラクタが存在しない
というエラーが発生してしまいます。
そもそも、CMultiDocTemplateの定義にデフォルトコンストラクタが存在しないので
当然といえば、当然のエラーなのですが、どうすればよいのでしょうか

Kerry 2007/10/26(金) 21:27:58
CMultiDocTemplateクラスと同じ引数のコンストラクタを定義すれば良いのでわ。

CMyDocTemplate(
    UINT nIDResource,
    CRuntimeClass* pDocClass,
    CRuntimeClass* pFrameClass,
    CRuntimeClass* pViewClass)
: CMultiDocTemplate(nIDResource, pDocClass, pFrameClass, pViewClass)
{
}

sizuku 2007/10/29(月) 11:23:22
休日を挟んで返信が遅れてしまってすいません。
提示されたソースをもとに上手く動くようになりました。
Kerry さん、ありがとうございました。

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