2012-01-05 4 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 함수를 호출합니다.

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

나는이 도움이 되었으면 좋겠 :

당신이 정말로 각 뷰에 메시지를 게시보다는 OnUpdate 전화, UpdateAllViews과 비슷한 일을해야하는 경우

!

+1

이 메서드는 스레드로부터 안전합니까? 감사! :) – webnoon

+1

@webnoon 여러 스레드가 문서에 첨부 된보기 목록을 변경할 수 있으면 스레드 안전하지 않습니다. – ChrisN

관련 문제