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

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

 2009-02-11 20:00:34 来源:WEB开发网   
核心提示: CDocument::DisconnectViews将所有的视图都与文档“失连”:void CDocument::DisconnectViews(){ while (!m_viewList.IsEmpty()) {CView* pView = (CView*)m_v

CDocument::DisconnectViews将所有的视图都与文档“失连”:

void CDocument::DisconnectViews()
{
    while (!m_viewList.IsEmpty())
    {
       CView* pView = (CView*)m_viewList.RemoveHead();
       ASSERT_VALID(pView);
       ASSERT_KINDOF(CView, pView);
       pView->m_pDocument = NULL;
    }
}

实际上,类CDocument对视图的管理与类CDocManager对文档模板的管理及CDocTemplate对文档的管理非常类似,少不了的,类CDocument中可遍历对应的视图(出现GetFirstXXX和GetNextXXX两个函数):

POSITION CDocument::GetFirstViewPosition() const
{
    return m_viewList.GetHeadPosition();
}
  
CView* CDocument::GetNextView(POSITION& rPosition) const
{
    ASSERT(rPosition != BEFORE_START_POSITION);
        // use CDocument::GetFirstViewPosition instead !
    if (rPosition == NULL)
       return NULL;  // nothing left
    CView* pView = (CView*)m_viewList.GetNext(rPosition);
    ASSERT_KINDOF(CView, pView);
    return pView;
}
CDocument::GetFile和CDocument::ReleaseFile函数完成对参数lpszFileName指定文档的打开与关闭操作:
CFile* CDocument::GetFile(LPCTSTR lpszFileName, UINT nOpenFlags,
    CFileException* pError)
{
    CMirrorFile* pFile = new CMirrorFile;
    ASSERT(pFile != NULL);
    if (!pFile->Open(lpszFileName, nOpenFlags, pError))
    {
       delete pFile;
        pFile = NULL;
    }
    return pFile;
}
  
void CDocument::ReleaseFile(CFile* pFile, BOOL bAbort)
{
    ASSERT_KINDOF(CFile, pFile);
    if (bAbort)
       pFile->Abort(); // will not throw an exception
    else
       pFile->Close();
    delete pFile;
}

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

Tags:深入浅出 MFC 文档

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