CFormViewのメンバ変数をドキュメントクラスのシリアライズでファイル保存するのに、ドキュ
メントクラスからCFormViewのメンバ変数を参照するにはどうすればよいのですか?
>ドキュメントクラスからCFormViewのメンバ変数を参照するにはどうすればよいのですか?
ではなくて
CFormViewのほうでGETDOCUMENTでポインタを取得して
ドキュメントクラスへ書き込んでシリアライズすればいいのではないですか
VCのチュートリアル勉強すればすぐわかるよ
ヴァージョンは1.0、2.0,4,0,4.1,4.2,5.0,6.0
すべて同じチュートリアルついているよ
多少バージョンの違いはあるけど、すべて同じ内容のものです
>ドキュメントクラスへ書き込んでシリアライズすればいいのではないですか
これがいやなら
開発環境、実行環境、OSバージョン、VCバージョン、
どこまで自分で調べたのか、どんなコードまで自分で作成出来たのか
すべて書いてください
最近この手の質問による、トラブルに似た状態がありましたので、答えてくれる人
少ないかも?
MFCから始めた方の初期段階でよく見られる状態に陥っていますね。
CFormView上のエディットボックスの値を保存するのが目的のようですが、MFCのドキュメ
ントアーキテクチャのフレームワークを最大限に活用するならば,以下のように簡単にでき
ます。ただし、手順を覚えるのではなくその意味を理解してください。でないとこの先も
同じ質問を繰り返すはめになるでしょう。
既にwoodさんがおっしゃられていることですが、シリアライズすべきデータは全てドキュ
メントクラスに持たせます。ビュークラスは、ユーザーインターフェースとして使用する
ものであり、ドキュメントクラスのデータを見るまたはデータを更新するための手段とし
て用います。
この前提を踏まえた上で話を進めます。
1.CFormView上のエディットボックスにコントロールタイプのメンバ変数を割り当てます。
m_edとします。
2.エディットボックスが扱うデータをドキュメントクラスに作ります。publicメンバ変数
として CString m_strを追加します。
3.シリアライズ処理をドキュメントクラスに実装します。
void CxxxDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: この位置に保存用のコードを追加してください。
ar << m_str; //<-------ここ
}
else
{
// TODO: この位置に読み込み用のコードを追加してください。
ar >> m_str; //<-------ここ
}
}
4.エディットボックスでデータを見るために CxxxView::OnInitialUpdate()内で
CFormView::OnInitialUpdate(); の後に次の1文を加えます。
m_ed.SetWindowText(GetDocument()->m_str);
5.viewクラスでエディットボックスの文字が変更されたときにドキュメントクラスのデー
タを書き換えるようにします。ビュークラスにエディットボックスのEN_CHANGEのメッ
セージハンドラを追加します。その中に以下の1文を加えます。
m_ed.GetWindowText(GetDocument()->m_str);
以上で終了です。「保存」「開く」など試してみてください。
冒頭にも申しましたが、上記のうちわからない部分はネットで検索したり、MSDNを用いて
徹底的に調べることが応用力をつけるためには重要です、でないとちょっと仕様が違うだ
けで何をどうしていいかわからないという状況になります。
また上は、ドキュメントビューアーキテクチャを理解してもらうための例に過ぎず、実際
には ModifiedFlag をどうするかとか、最初に空のドキュメントを開くべきかとか、細か
な問題があることを付け加えておきます。