Serializeでファイル再読み込みできない?

[戻る]
たか 2006/12/16(土) 00:07:48
いつもお世話になっています。
Visual Studio 2005 VC++ MFC を使っていますが、よく解らない症状を見つけ
どうしようかと悩んでいます。
初心者でして、初めて Serialize関数にコードを書こうとしています。
コードを書く前にファイルを「開く」のファイル選択ダイアログの動作を確認していて
気が付いたのですが、、、、、
同じファイルを2回続けて「開く」をすると、1回目はSerializeに処理が飛んでくる
のですが、2回目はSerializeに処理が来ません。
別のファイルを「開く」をするとSerializeに処理が飛んできます。
同じファイルを続けて「開く」をした場合、デバッガで動きを追跡しますと、
何かがMatchしたという事でSerializeへ行く前にOpenFile関係の処理を
終了していました。

同じファイルを再読み込みしたい時などは、上記のようなことでは困ります。

ドキュメントクラスはこのような動きをするものなのでしょうか?
なにか対応が不足しているのでしょうか?

すみませんが、ご存知の方、教えてください。

よろしくお願いします。

aharen [HomePage] 2006/12/16(土) 07:48:38
おなじようなことに遭遇したことがあります
うろおぼえで失礼ですが
1回目の開くと2回目の開くの間に
名づけて保存を実行するといかがでしょうか

たか 2006/12/16(土) 09:46:56
aharenさんレスありがとうございます。

> 1回目の開くと2回目の開くの間に名づけて保存を実行するといかがでしょうか

この操作を試してみました。
ファイルAを一回読み込みます。この時はSerializeがコールされます。
再度、ファイルAを読み込みます。Serializeは、コールされません。
この状態で、ファイルBに名付けて保存します。
ここで再々度ファイルAを読み込みますと、Serializeがコールされます。
また、、、、
ファイルBに名付けて保存した直後は、ファイルBを読み込もうとしますと、
Serializeは、コールされません。

どうも、今どのファイルをロード済みかを覚えていて、親切に(不親切かも?)
読み込みをパスしてくれるような動きをしているようです。

一見便利なようですが、「余計なお世話」のような動きですね。

回避する方法はあるのでしょうか?
すみません。ご存知の情報がありましたら教えてください。

よろしくお願いします。

aharen [HomePage] 2006/12/16(土) 10:47:37
おしえてもらったことはありますが
CArchiveの構築などあまりにもめんどうだったので
上記の程度でがまんしてやめました
今 他の板などを探しましたら

http://forums.belution.com/ja/vc/000/218/15.shtml

が似ているようですが やはりめんどうなようですね

たか 2006/12/16(土) 11:29:43
aharenさん情報ありがとうございます。

他の板をみました。皆さん苦労されているようですね。
めんどうというか初心者の私にはちょっと難しいです。
追って勉強していきたいと思います。

取り急ぎは、Serializeを使わずに、個別のファイル選択ダイアログを
使って自前の「開く」処理を作って回避しようかと思っています。

また、いい方法があれば教えてください。
ありがとうごさいました。

Kerry 2006/12/16(土) 12:54:23
↓の「(Visual C++)既に開かれているドキュメントを開く方法。」が
参考になると思います。

http://www.sutosoft.com/oldroom/devdiary/old/dev200006.html

aharen [HomePage] 2006/12/16(土) 13:34:27
>「(Visual C++)既に開かれているドキュメントを開く方法。」

Kerryさん ありがとうございます 勉強します

たか 2006/12/16(土) 14:14:34
Kerryさん貴重な情報ありがとうございます。

早速、試してみましたが、初心者の悲しさ、、、、、
CSingleDocTemplateクラスの派生がうまくできません。

error C2512: 'CSingleDocTemplate' : クラス、構造体、共用体に既定のコンストラクタが
ありません。

というエラーがでてしまいます。
MFCクラスの追加メニューにて追加しましたが、なにが悪いのか。

私のほうではこれから色々試してみます。

もし、なにかお気づきの点ありましたら申し訳ないですが教えてください。

よろしくお願いします。

たか 2006/12/16(土) 15:18:08
[[解決]]
Kerryさん、aharenさん ありがとうございました。

CSingleDocTemplateの派生もなんとかできました。

同問題を解決する別のホームページを見つけました。

http://www.ne.jp/asahi/hishidama/home/tech/vcpp/reload.html

ここに書かれている手法は、別のクラスを派生して対応されていますが、
Kerryさんに紹介いただいた方法のほうがコーディングが少なくて簡単です。

私の見つけたホームページでクラス派生方法を参考にしながら CSingleDocTemplate を
派生させ、無事 Kerryさん紹介手法を実現する事ができました。

連続して同じファイルを「開く」しても、ちゃんと Serializeがコールされています。
うれしい!!!

Kerryさん、aharenさん お蔭様でずいぶん勉強になり、問題もクリアされました。
感謝しています。
またいつかお世話になるかも知れませんが、また、よろしくお願いします。

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