mfc单文档应用程序 打开文件操作默认的消息响应函数在哪个地方_百度知 ...
发布网友
发布时间:2023-11-29 16:54
我来回答
共2个回答
热心网友
时间:2024-07-26 20:48
在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;
}
热心网友
时间:2024-07-26 20:49
这个函数系统写好的,一般我们也不需要改写,你可以查看菜单中Open项的ID(好像是IDR_FILE_OPEN),然后全局搜索这个ID看能不能找到想关联的相应函数吧