こんばんは。さおりと申します。
環境は、WinMe、VC++6.0、MFCです。
左右に2つの分割ウィンドウを作成して、左にフォームビュー、右にスクロールビューを
貼り付けてます。
今回の質問に関係あるかわかりませんが、シングルドキュメントで、テンプレートの
作成の時は、ランタイムクラスにフォームビューの方を登録してます。
フォームビューであるボタンが押されたら、その結果を右のスクロールビューに
表示させようと考えています。
しかし、フォームビューでボタンが押された! ということを右のスクロールビューに
どうやって教えればよいのかがわかりませんでした。
どなかか教えてください。
よろしくお願いいたします。
フォームビューのボタンが押された際、
GetDocument()->UpdateAllViews(this);
とすれば、その他のビュー(ここではスクロールビュー)の、
OnUpdate が呼び出されます。
これを利用できませんか?
1.CDocument に各 View へのポインタを持たせておく。
CView *m_pFormView, *m_pScrollView;
2.CDocumentのコンストラクタでNULLに初期化。
3.各 View のOnInitialUpdate で、ポインタに自分のアドレスを代入。
CDocument *pDoc = GetDocument();
pDoc->m_pForm = this;
4.FormView で ScrollView を参照したいときは、CDocument 経由で参照。
一応、NULLのチェックはしたほうが良いかも。
必要に応じて cast してください。
この方法で他の View へのアクセスが可能ですが、
better な方法があるような気がします。
フォームビューをCFormView1
スクロールビューをCScrollView1としたとき
フォームビューで
extern CScrollView1* pScrollView1;
としておき、
スクロールビューで
CScrollView1* pScrollView1;
スクロールビューのコンストラクタで
pScrollView1 = this;
としておくとフォームビューから直接スクロールビューを参照出来ます。
フォームビューでスクロールビューのヘッダをインクルードするのも忘れずに。
楽なので、いつもこの方法でドキュメントビューアーキテクチャは無視しています(^^;)