2012-01-05 45 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 2012-01-05 20:48:52

+0

GetDocument() - > UpdateAllViews()不是線程安全的,據我所知。 – webnoon 2012-01-06 00:06:28

回答

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 2012-01-06 00:08:33

+1

@webnoon如果多個線程可以更改附加到文檔的視圖列表,那麼不是線程安全的。 – ChrisN 2012-01-06 08:21:38

相關問題