CTreeViewのOnInitialUpdateからCListViewへデータを送ると更新されない

[戻る]
mikan 2005/05/20(金) 01:10:35
MFC VC++6.0 SID WindowsXP

CTreeViewのOnInitialUpdateからCListViewへ関数でデータを送るのですが、
リストビューの更新がかかりません。

何故なのかさっぱりわかりません。
OnInitialUpdateの中ではビューの更新はかからないのでしょうか?

教えてください。

たいちう 2005/05/20(金) 12:22:40
何をやりたいのかさっぱりです。

複数のViewを持つSDIのアプリケーションを作成していて、
CTreeViewとCListViewを持っているんですよね?

各Viewが表示すべきデータは、CDocumentが持っているべきで、
CTreeViewが直接CListViewを操作する、ということは原則に
反しています。
CTreeViewはCDocumentを更新し、CDocument::UpdateAllViews()で
CListView::OnUpdateを呼び出すべきと思います。

原則からはずれたら実現不可能、というわけではないですが、
特別な理由がないなら、原則に従う方が無難でしょう。

WIZ [E-Mail] 2005/05/20(金) 18:01:00
マルチビューで一方のビューへの操作が他方のビューへも反映されるようなアプリの
実装方法はたいちうさんの仰る通りだと思います。しかし、質問者のmikan さんは
OnInitialUpdate、つまりビューの初期表示の話をしていると思うので
CDocument::UpdateAllViews, CView::OnUpdate は関係無いでしょう。

デザパタとか MFC フレームワークに則るなら、ツリービューの初期表示ハンドラ
CxxxTreeView::OnInitialUpdate からリストビューの更新ハンドラ
CxxxListView::OnUpdate をコールするということはしないと思います。
また各ビュー間で直接情報交換するのを止めて、ドキュメントを介してインタフェースする
方が良いと思います。

表示すべき情報はドキュメントが保持し、各ビューは OnInitialUpdate でドキュメント
にアクセスして情報を取得して初期表示するという構造がオーソドックスかと。

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