难道CDocument类的实例,在某个地方保存了各个View对象的链表,以至于可以用枚举的方式找到,如下:
void CMyDoc::OnRepaintAllViews()
{
   POSITION pos = GetFirstViewPosition();
   while (pos != NULL)
   {
      CView* pView = GetNextView(pos);
      pView->UpdateWindow();
   }   
}
问题是,GetFirstViewPosition是从哪里去Get了这些Position, GetNextView又是从哪里去Get了NextView,总得保存在某个地方去吧?望高手回答!

解决方案 »

  1.   

    Doc中的View是以列表存储的
    GetFirstViewPosition和GetNextView是CDocument的方法,它自己当然能拿到View的指针
    最后一个View的指针其 指向下一个节点为空
      

  2.   

    CDocument中的CPtrList m_pViewList指向一个view的链表,表示一个Document可以对应多个View。
      

  3.   

    其实这里只需要调用UpdateAllViews就可以了,不需要自己再写一遍 
      

  4.   

    pos != NULL 如果下一个view没有了 view为NULL
      

  5.   

    void CDocument::UpdateAllViews(CView* pSender, LPARAM lHint, CObject* pHint)
    // walk through all views
    {
    ASSERT(pSender == NULL || !m_viewList.IsEmpty());
    // must have views if sent by one of them POSITION pos = GetFirstViewPosition();
    while (pos != NULL)
    {
    CView* pView = GetNextView(pos);
    ASSERT_VALID(pView);
    if (pView != pSender)
    pView->OnUpdate(pSender, lHint, pHint);
    }
    }