通过文档更新某些特定的视图,并不是所有已经打开的视图。所以不想使用pDocument->UpdateAllViews(NULL).比如我定义一个消息WM_UPDATE_DATA,如何有控制的更新目标视图呢?操作是在CDocument文档完成。难道要遍历视图向每个视图发送这个消息么?我能否发给CMainFrame框架,它会把消息派发给目标视图么?void CMyDocument::UpdateTargetViews(void)
{
 // 如何做?
}

解决方案 »

  1.   

     应该可以的,我在对话框上边实现过。1. GetParent()获取对应CMainFrame指针
    CMainFrame内包含各个视图的成员指针。2. 在获取各个 视图成员指针后,
    然后对 目标视图进行操作就可以了。
    试试看。
      

  2.   

    通过UpdateAllViews传递参数,在视图类的OnUpdate中通过参数判断更新的是哪一个。
      

  3.   

    我们知道在View里面,通过GetDocument() 就能得到自己的Document。
    反过来在Document里面,为自己显示数据的各个View的指针,也必须轻松的取得,以后做事情就方便了。
    通过各个View的指针了解各个View的状态,根据状态,作Document想做的事情。例:
    CView1* CRakurokuDoc::GetView1()
    {
    POSITION pos = GetFirstViewPosition();
    while (pos)
    {
    CView* pView = GetNextView(pos);
    if (pView && pView->IsKindOf(RUNTIME_CLASS(CView1)))
    return (CView1*)pView;
    }
    return NULL;
    }
    同样
    CView2* CRakurokuDoc::GetView2()
    CView3* CRakurokuDoc::GetView3()在Document里面
    CView2* pView2 = GetView2()
    if (pView2 && pView2->怎样())
    {
        pView2->Invalidate();
    }
      

  4.   


    多谢!我还是模仿CDocument的UpdateAllViews改写了一个
    UpdateAllTargetViews()通过判断pView->IsKindOf(CRuntimeClass*)来确定是否是目标视图,选择性发送SendMessage(msg,0,0)