MFC 的MDI创建空文档调用过程
来源:互联网 发布:sql开发工程师招聘 编辑:程序博客网 时间:2024/06/18 13:02
1,XXApp类中的消息映射
ON_COMMAND(ID_FILE_NEW, CWinAppEx::OnFileNew)
2,
void CWinApp::OnFileNew()
{
if(m_pDocManager != NULL)
m_pDocManager->OnFileNew();
}
void CDocManager::OnFileNew()
{
if(m_templateList.IsEmpty())
{
TRACE(traceAppMsg, 0, "Error: no document templates registered withCWinApp.\n");
AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
return;
}
CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetHead();
if (m_templateList.GetCount()> 1)
{
// morethan one document template to choose from
// 超过一个doctemplate出现对话框让用户选择
CNewTypeDlg dlg(&m_templateList);
INT_PTR nID = dlg.DoModal();
if(nID == IDOK)
pTemplate =dlg.m_pSelectedTemplate;
else
return; // none - canceloperation
}
ASSERT(pTemplate != NULL);
ASSERT_KINDOF(CDocTemplate, pTemplate);
pTemplate->OpenDocumentFile(NULL);
// ifreturns NULL, the user has already been alerted
}
4,
CDocument*CMultiDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bAddToMRU, BOOLbMakeVisible)
{
CDocument* pDocument = CreateNewDocument(); 创建Doc类对象
if(pDocument == NULL)
{
TRACE(traceAppMsg, 0, "CDocTemplate::CreateNewDocument returnedNULL.\n");
AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
returnNULL;
}
ASSERT_VALID(pDocument);
BOOL bAutoDelete =pDocument->m_bAutoDelete;
pDocument->m_bAutoDelete = FALSE; // don't destroyif something goes wrong
CFrameWnd* pFrame = CreateNewFrame(pDocument, NULL); 创建ChildFrame和View对象
pDocument->m_bAutoDelete = bAutoDelete;
if(pFrame == NULL)
{
AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
deletepDocument; //explicit delete on error
returnNULL;
}
ASSERT_VALID(pFrame);
if(lpszPathName == NULL)
{
//create a new document - with default document name
SetDefaultTitle(pDocument);
// avoidcreating temporary compound file when starting up invisible
if(!bMakeVisible)
pDocument->m_bEmbedded =TRUE;
if(!pDocument->OnNewDocument())虚函数
{
//user has be alerted to what failed in OnNewDocument
TRACE(traceAppMsg, 0, "CDocument::OnNewDocument returned FALSE.\n");
pFrame->DestroyWindow();
returnNULL;
}
// itworked, now bump untitled count
m_nUntitledCount++;
}
else
{
// openan existing document
CWaitCursor wait;
if(!pDocument->OnOpenDocument(lpszPathName))
{
//user has be alerted to what failed in OnOpenDocument
TRACE(traceAppMsg, 0, "CDocument::OnOpenDocument returned FALSE.\n");
pFrame->DestroyWindow();
returnNULL;
}
pDocument->SetPathName(lpszPathName,bAddToMRU);
pDocument->OnDocumentEvent(CDocument::onAfterOpenDocument);
}
InitialUpdateFrame(pFrame, pDocument,bMakeVisible);
return pDocument;
}
- MFC 的MDI创建空文档调用过程
- MFC MDI 打开文件的调用过程
- MFC MDI使用自定义模板对话框创建子文档
- MFC MDI GetActiveView() 为空
- MFC 单文档创建过程
- MFC框架的窗口、文档、视的创建过程
- MFC 多文档接口MDI,ReBar实现工具条的可拖拽
- MFC多文档的创建和打开过程
- MFC MDI OnOpenDocument后自动调用相应的OnDraw
- MFC中创建没有子窗口的MDI应用程序
- MFC中创建没有子窗口的MDI应用程序
- MFC创建的MDI程序 新建一个子文档 主窗口标题自动会被追加上子文档的名字 取消此功能
- MFC多文档(MDI)去边框
- 在mfc编程中,创建多文档应用程序时,如何关闭启动时自动打开的空文档
- MDI程序系统框架单文档对应多视图 切换 创建实现过程。
- MDI开启时禁止创建新文档
- MFC框架的创建过程
- MFC创建窗口的过程
- C语言--typedef关键字
- AppWidgetProvider小部件开发(RemoteViews 机制分析)
- sqlserver 序列
- C# 开启线程几种方式
- CodeForces 864A Fair Game
- MFC 的MDI创建空文档调用过程
- semanage命令详解
- R数据显示不全,最大行数options(max.print=1000000)
- 洛谷 P2296 寻找道路
- 排名函数
- 作业1.#define PINT int * 2.typedef int * SINT;
- 20条系统管理员需要知道的命令
- linux命令
- Ubuntu 16.04安装PyCharm-Python IDE