MFC SDI です、ファイルを開いて、エディットビューに表示し、かつ、
一行ずつコンテナに読込みたいのですが、デバッグモードで実行すると、Debug
Assertion Failed! が起こります
ネットで検索しますと、エディットビューのデータを取得したい場合、
ビューのドキュメントを取得する方法は多く見られるのですが、シリアライズする時点で
データをコンテナに取得しかつ、エディットビューに表示するような例は
見当たりませんでした、このような使い方はイレギュラーなのでしょうか?
また、どのようにすれば目的が果たせるでしょうか。よろしくお願いします。
// CxxxDoc シリアル化
void CxxxDoc::Serialize(CArchive& ar)
{
CString line;
if( ar.IsLoading() == TRUE)
{
while(ar.ReadString(line))
{
// メンバ変数 std::vector<CString> mc_vec
mc_vec.push_back(line);
}
}
if(ar.IsBufferEmpty())
reinterpret_cast<CEditView*>(m_viewList.GetHead())->SerializeRaw(ar);
}
void CxxxDoc::Serialize(CArchive& ar)
{
arからまずデータをよみます それをView側の変数に転送する
それから たとえば pViewにView側のポインタをゲットして
pView->Invalidate();すると
OnDraw(~){~~~}が起動されるから
そのなかでViewにお好きなように展開なさるのも一法
}
初心者だけど さん、ご回答ありがとう。
>arからまずデータをよみます それをView側の変数に転送する
これはできたのですが
>pViewにView側のポインタをゲットして
これは、CxxxViewクラスのポインタを、CxxxDocクラスでゲットするということだと思う
のですが、
すみません、具体的な例を教えていただきませんか。
m_viewList はドキュメントに関連付けられたビューのリスト?
だとしたら、わざわざ自分で管理しなくて良いです。
以下のMFC関数で管理できます。
CDocument::GetFirstViewPosition()
CDocument::GetNextView()
例えば、SerializeRaw()関数呼ぶだけなら、以下の通りで良いです。
void CxxxDoc::Serialize(CArchive& ar)
{
POSITION Pos = GetFirstViewPosition();
while(Pos)
{
CEditView* lpView = (CEditView*)GetNextView(Pos);
lpView->SerializeRaw(ar);
}
}
それでは、本題です。
> 一行ずつコンテナに読込みたいのですが、デバッグモードで実行すると、Debug
> Assertion Failed! が起こります
どういうAssertionですか?
Assertionのときは、[再試行]するとファイル名,行番号およびAssertionの原因が
分かります。
たぶん、「ファイルの末尾に達した」とか、そういうのですよね?
そうだとするなら、以下のコードのせいで、
> while(ar.ReadString(line))
で、すでにファイルポインタがファイル末尾に行っちゃってるんです。
ファイルポインタを戻してください。
ar.GetFile()->SeekToBegin();
>これは、CxxxViewクラスのポインタを、CxxxDocクラスでゲットするということだと
>思うのですが、
CView::GetDocument();
MSDNサンプル Scribbleをダウンロードするといいと思います。
HTTPに頼るのもいいですが、ドキュメント/ ビュー
今回スレにはでていませんがフレームの関係についてはMSDNでも説明があります。
いつものことですが、説明は分かり難いですが内容は確かなものだと思いますので
MSDNをよく読むことを薦めます。
遠いようで一番の近道は書籍を購入することですね。
bun さんありがとう
ご指摘通り、ファイルポインタを戻したら期待通りの動作となりました。
ITOさん、scribbleの紹介ありがとう、MDIの良い題材ですね大変勉強になります
気づいたのですが、データ処理はDocクラスで行い、描画やプリントの処理はViewクラスで
行っているように思うのですが、特殊な場合もあるのでしょうが、基本のスタイルは
このパターンでいいのでしょうか?
それから、書籍の件ですがMFCの良書も紹介して頂けないでしょうか、Amazonで検索しますと
近年はMFCの本というのは出版されていないようですが、古い本でも結構ですので良い本
をご存知でしたら紹介願います、洋書はちょっと難有り(私の読解能力)ですが、合わせ
てお願いします。
それから、MSDNは読んでも理解できない場合が多いので敬遠がちですが、調べる努力をし
ていきます。
> 気づいたのですが、データ処理はDocクラスで行い、描画やプリントの処理はViewク
> ラスで行っているように思うのですが、特殊な場合もあるのでしょうが、
> 基本のスタイルはこのパターンでいいのでしょうか?
僕は、ドキュメントはあまり使わないので、詳細は省きますが、
基本はいいと思います。
> それから、書籍の件ですがMFCの良書も紹介して頂けないでしょうか、Amazonで
> 検索しますと近年はMFCの本というのは出版されていないようですが、
> 古い本でも結構ですので良い本をご存知でしたら紹介願います、
> 洋書はちょっと難有り(私の読解能力)ですが、合わせてお願いします。
うーん、僕も本探しはへたですね。
東京はとおいですか?
「今のところ立ち読み出来る本屋さんで大きいのは、「八重洲ブックセンター」
でしょうかな?」と思います。
あと、秋葉原にも何件かありましたが、かなり模様替えしたので詳細は分かりません
ね。
初めてのときは、やはり書店で読んで選ぶのがいいと思います。
時間が掛かりますが順当の手段だと思います。
ITOさんありがとうございました。
MFC本は、東京へ出張した際に探して見たいと思います。