OnOpenDocumentやSerializeが呼ばれない – プログラミング – Home

通知
すべてクリア

OnOpenDocumentやSerializeが呼ばれない


sizuku
 sizuku
(@sizuku)
ゲスト
結合: 17年前
投稿: 5
Topic starter  

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


引用解決済
トピックタグ
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

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
 sizuku
(@sizuku)
ゲスト
結合: 17年前
投稿: 5
Topic starter  

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


返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

CMultiDocTemplateクラスと同じ引数のコンストラクタを定義すれば良いのでわ。

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


返信引用
sizuku
 sizuku
(@sizuku)
ゲスト
結合: 17年前
投稿: 5
Topic starter  

休日を挟んで返信が遅れてしまってすいません。
提示されたソースをもとに上手く動くようになりました。
Kerry さん、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました