难道CDocument类的实例,在某个地方保存了各个View对象的链表,以至于可以用枚举的方式找到,如下:
void CMyDoc::OnRepaintAllViews()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView* pView = GetNextView(pos);
pView->UpdateWindow();
}
}
问题是,GetFirstViewPosition是从哪里去Get了这些Position, GetNextView又是从哪里去Get了NextView,总得保存在某个地方去吧?望高手回答!
void CMyDoc::OnRepaintAllViews()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView* pView = GetNextView(pos);
pView->UpdateWindow();
}
}
问题是,GetFirstViewPosition是从哪里去Get了这些Position, GetNextView又是从哪里去Get了NextView,总得保存在某个地方去吧?望高手回答!
GetFirstViewPosition和GetNextView是CDocument的方法,它自己当然能拿到View的指针
最后一个View的指针其 指向下一个节点为空
// 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);
}
}