WEB开发网
开发学院软件开发VC 深入浅出MFC“文档/视图”架构(3)――文档 阅读

深入浅出MFC“文档/视图”架构(3)――文档

 2009-02-11 20:00:34 来源:WEB开发网   
核心提示: 一个文档可以有多个视图,每一个文档都维护一个与之相关视图的链表(CptrList类型的 m_viewList实例),深入浅出MFC“文档/视图”架构(3)――文档(2),CDocument::AddView将一个视图连接到文档上,并将视图的文档指针指向该文档:void CDocument:

一个文档可以有多个视图,每一个文档都维护一个与之相关视图的链表(CptrList类型的 m_viewList实例)。CDocument::AddView将一个视图连接到文档上,并将视图的文档指针指向该文档:

void CDocument::AddView(CView* pView)
{
    ASSERT_VALID(pView);
    ASSERT(pView->m_pDocument == NULL); // must not be already attached
    ASSERT(m_viewList.Find(pView, NULL) == NULL);  // must not be in list
  
    m_viewList.AddTail(pView);
    ASSERT(pView->m_pDocument == NULL); // must be un-attached
    pView->m_pDocument = this;
  
    OnChangedViewList();  // must be the last thing done to the document
}

CDocument::RemoveView则完成与CDocument::AddView相反的工作:

void CDocument::RemoveView(CView* pView)
{
    ASSERT_VALID(pView);
    ASSERT(pView->m_pDocument == this); // must be attached to us
  
    m_viewList.RemoveAt(m_viewList.Find(pView));
    pView->m_pDocument = NULL;
  
    OnChangedViewList();  // must be the last thing done to the document
}

从CDocument::AddView和CDocument::RemoveView函数可以看出,在与文档关联的视图被移走或新加入时CDocument::OnChangedViewList将被调用:

void CDocument::OnChangedViewList()
{
    // if no more views on the document, delete ourself
    // not called if directly closing the document or terminating the app
    if (m_viewList.IsEmpty() && m_bAutoDelete)
    {
       OnCloseDocument();
       return;
    }
  
    // update the frame counts as needed
    UpdateFrameCounts();
}

上一页  1 2 3 4 5 6 7  下一页

Tags:深入浅出 MFC 文档

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接