mfc单文档应用程序 打开文件操作默认的消息响应函数在哪个地方 10

 我来答
bhtzu
2013-11-02 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4158万
展开全部

在MFC框架代码中,不在你自己的程序里面。

MFC对很多默认操作做了层层封装,单就打开文件来说,如果你自己不实现响应函数,那么文档模板类会产生一个默认操作,对应单/多文档,会有不同的响应(新建还是重载当前),包括OLE拖拽、命令行参数(这个是在CWinApp中),都有打开文件的相关调用。

但总归最后,打开代码在文档类的基类CDocument 中,这个是开源的,代码如下:

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;
}
布列瑟农s狼
2013-11-02 · TA获得超过226个赞
知道小有建树答主
回答量:130
采纳率:0%
帮助的人:127万
展开全部
这个函数系统写好的,一般我们也不需要改写,你可以查看菜单中Open项的ID(好像是IDR_FILE_OPEN),然后全局搜索这个ID看能不能找到想关联的相应函数吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式