CDocument::OnOpenDocument

当用户在界面上选择文件菜单/打开文件(ID_FILE_OPEN)时,CWinApp派生类的OnFileOpen函数被自动调用,它通过文档模板创建(MDI)/重用(SDI)框架、文档和视图对象,并最终调用CDocument::OnOpenDocument来读文件,CDocument::OnOpenDocument 的处理流程如下:

     BOOL CDocument::OnOpenDocument(LPCTSTR lpszPathName)
        {
            if (IsModified())
        TRACE0("Warning: OnOpenDocument replaces an unsaved document./n");
       
        CFileException fe;
        CFile* pFile = GetFile(lpszPathName,
        CFile::modeRead|CFile::shareDenyWrite, &fe);
        if (pFile == NULL)
        {
        ReportSaveLoadException(lpszPathName, &fe,
        FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
        return FALSE;
        }
       
        DeleteContents();
        SetModifiedFlag();  // dirty during de-serialize
       
        CArchive loadArchive(pFile, CArchive::load | CArchive::bNoFlushOnDelete);
        loadArchive.m_pDocument = this;
        loadArchive.m_bForceFlat = FALSE;
        TRY
        {
        CWaitCursor wait;
        if (pFile->GetLength() != 0)
        Serialize(loadArchive);     // load me
        loadArchive.Close();
        ReleaseFile(pFile, FALSE);
        }
        CATCH_ALL(e)
        {
        ReleaseFile(pFile, TRUE);
        DeleteContents();   // remove failed contents
       
        TRY
        {
        ReportSaveLoadException(lpszPathName, e,
        FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);
        }
        END_TRY
        DELETE_EXCEPTION(e);
        return FALSE;
        }
        END_CATCH_ALL
       
        SetModifiedFlag(FALSE);     // start off with unmodified
       
        return TRUE;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值