MDI程序。
一个doc,多个视图。从串口读上来的数据要以不同的方式显示。一种方式一个视图。
从串口上来的数据改变doc数据,然后在doc中,依据不同的判定条件通知不同种类的视图更新,该如何做?如果一个视图,那简单的很,直接UpdateAllviews就可以。
两个视图也成,例如:如果想更新的是a视图,那么UpdateAllviews(&b)也凑合。现在有一堆视图,如何搞那?因为是实时的,所以需要不断地更新数据。   
向特定的视图发送自定义消息?还是直接调用特定视图的OnDraw?有没有更直接的方法?谢谢

解决方案 »

  1.   

    用自定义消息不是很好吗?
    有一个烦一点的办法就是用GetFirstViewPosition和GetNextView遍历每一个view,再根据情况来更新其中某一个。这当然比发消息烦多了。
      

  2.   

    在一文档更新多视图
    UpdateAllViews(CView *pSender,LPARAM lparam,WPARAM wparam)
    更新指定视图
    OnUpdate(CView *pSender,LPARAM lparam,WPARAM wparam)
      

  3.   

    不是吧?有CDocument::OnUpdate(CView *pSender,LPARAM lparam,WPARAM wparam)这么一个成员吗?
    文档上怎么没有?
      

  4.   

    Update的时候设置lHint为一个自定义的值。注意0表示默认的更新窗口。
      

  5.   

    jiangsheng(蒋晟.Net) 
    这位大牛,俺还是不太明白,可否详细一些?多谢多谢。你写完俺就结帐
      

  6.   

    void CDataTreeView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
    {
    switch(lHint){
    case 0:
    CTreeView::OnUpdate(pSender, lHint, pHint) ;break;
    default:m_pDataImpl->HandleOnUpdate(pSender, lHint, pHint);break;
    }
    }
    void CDataImpl::HandleOnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
    {
    if(m_pView){
    if(IsNotifyMeSel(lHint)){
    if(pHint)
    m_varSelObjID=*(_variant_t*)pHint;
    HandleOnRefresh() ;return;
    }
    if(IsNotifyMe(lHint))
    HandleOnRefresh() ;return;
    }
    }