2012-01-05 7 views
2

すべてのビューにメッセージを投稿します。 私は、ドキュメントのグローバル参照を取得し、効果的な方法は何であるMFC - CViewクラスから派生したすべてのビューにメッセージを投稿するにはどうすればよいですか?

void SomeAppDoc::DispatchToAll(UINT msg, WPARAM wP, LPARAM lP) 
{ 
    //some how get all view's reference 
    //iterate and update each views 
} 

下のようなメソッドを実装して検討していますか?

+0

@ChrisNと同様、GetDocument() - > UpateAllViewsが効果的です。 – zar

+0

GetDocument() - > UpdateAllViews()はスレッドセーフではありません。 – webnoon

答えて

2

最も簡単な方法は、CDocument::UpdateAllViewsを呼び出して、ドキュメントに添付された各ビューのOnUpdate関数を呼び出します。

あなたは本当に各ビューにメッセージを投稿するのではなく、OnUpdateを呼び出し、UpdateAllViewsに似た何かをする必要がある場合:

void SomeAppDoc::DispatchToAll(UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    POSITION pos = GetFirstViewPosition(); 
    while (pos != NULL) 
    { 
     CView* pView = GetNextView(pos); 
     pView->PostMessage(msg, wParam, lParam); 
    } 
} 

私はこれが役に立てば幸い!

+1

このメソッドはスレッドセーフですか?ありがとう! :) – webnoon

+1

@webnoon複数のスレッドがドキュメントに添付されたビューのリストを変更できる場合、これはスレッドセーフではありません。 – ChrisN

関連する問題