创建一个新的视图窗口来显示已打开的文档中的内容
2005-11-22 08:35
701 查看
当调用CMultiDocTemplate::OpenDocumentFile时,为第二个参数传递FALSE,此时将不会显示视图窗口,但是一个文档确实已被打开了.BOOL CMyApp::InitInstance(){ … CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CSinoDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CSinoView)); AddDocTemplate(pDocTemplate); m_pMyDocTemplate = pDocTemplate; …}
void CMainFrame::OnFileOpen(){m_pDoc=theApp.m_pMyDocTemplate->OpenDocumentFile(dlg.GetPathName(), FALSE); //把打开的文档指针保存下来}可能在不久之后,你又需要视图窗口来显示这个已打开的文档中的数据.先跟踪MFC源码,看看CMultiDocTemplate:: OpenDocumentFile打开一个文档的过程.CDocument* CMultiDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible){ CDocument* pDocument = CreateNewDocument(); … CFrameWnd* pFrame = CreateNewFrame(pDocument, NULL); … InitialUpdateFrame(pFrame, pDocument, bMakeVisible); return pDocument;}
CFrameWnd* CDocTemplate::CreateNewFrame(CDocument* pDoc, CFrameWnd* pOther){CCreateContext context; context.m_pCurrentFrame = pOther; context.m_pCurrentDoc = pDoc; context.m_pNewViewClass = m_pViewClass; // 用来创建视图 context.m_pNewDocTemplate = this; CFrameWnd* pFrame = (CFrameWnd*)m_pFrameClass->CreateObject();pFrame->LoadFrame(m_nIDResource, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, // default frame styles NULL, &context);很简单,用下面的代码就可以创建一个新的视图来显示已打开的文档中的数据.void CMainFrame::OnShowData(){ … CFrameWnd* pFrame = theApp.m_pMyDocTemplate->CreateNewFrame(m_pDoc, NULL); … pFrame->InitialUpdateFrame(m_pDoc, TRUE); // 传递TRUE,打开视图窗口}也许你希望用另一个完全不同的视图来显示这个文档中的数据void CMainFrame::OnShowDataAnother(){CCreateContext context;CAnotherFrame* pFrame = new CAnotherFrame; // 如果默认的构造函数是protected,那么用下面的语句//CAnotherFrame*pFrame= //(CAnotherFrame*)RUNTIME_CLASS(CAnotherFrame)->CreateObject();// CAnotherFrame和下面的CAnotherView没有加入文档模板链表context.m_pCurrentFrame = pFrame;pFrame->m_pViewClass = RUNTIME_CLASS(CAnotherView);pFrame->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW| FWS_ADDTOTITLE, NULL, &context);pFrame->SetTitle(_T(“Title”));pFrame->InitialUpdateFrame(NULL, TRUE);pFrame->GetActiveView()->m_pDoc = m_pDoc;}
void CMainFrame::OnFileOpen(){m_pDoc=theApp.m_pMyDocTemplate->OpenDocumentFile(dlg.GetPathName(), FALSE); //把打开的文档指针保存下来}可能在不久之后,你又需要视图窗口来显示这个已打开的文档中的数据.先跟踪MFC源码,看看CMultiDocTemplate:: OpenDocumentFile打开一个文档的过程.CDocument* CMultiDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible){ CDocument* pDocument = CreateNewDocument(); … CFrameWnd* pFrame = CreateNewFrame(pDocument, NULL); … InitialUpdateFrame(pFrame, pDocument, bMakeVisible); return pDocument;}
CFrameWnd* CDocTemplate::CreateNewFrame(CDocument* pDoc, CFrameWnd* pOther){CCreateContext context; context.m_pCurrentFrame = pOther; context.m_pCurrentDoc = pDoc; context.m_pNewViewClass = m_pViewClass; // 用来创建视图 context.m_pNewDocTemplate = this; CFrameWnd* pFrame = (CFrameWnd*)m_pFrameClass->CreateObject();pFrame->LoadFrame(m_nIDResource, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, // default frame styles NULL, &context);很简单,用下面的代码就可以创建一个新的视图来显示已打开的文档中的数据.void CMainFrame::OnShowData(){ … CFrameWnd* pFrame = theApp.m_pMyDocTemplate->CreateNewFrame(m_pDoc, NULL); … pFrame->InitialUpdateFrame(m_pDoc, TRUE); // 传递TRUE,打开视图窗口}也许你希望用另一个完全不同的视图来显示这个文档中的数据void CMainFrame::OnShowDataAnother(){CCreateContext context;CAnotherFrame* pFrame = new CAnotherFrame; // 如果默认的构造函数是protected,那么用下面的语句//CAnotherFrame*pFrame= //(CAnotherFrame*)RUNTIME_CLASS(CAnotherFrame)->CreateObject();// CAnotherFrame和下面的CAnotherView没有加入文档模板链表context.m_pCurrentFrame = pFrame;pFrame->m_pViewClass = RUNTIME_CLASS(CAnotherView);pFrame->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW| FWS_ADDTOTITLE, NULL, &context);pFrame->SetTitle(_T(“Title”));pFrame->InitialUpdateFrame(NULL, TRUE);pFrame->GetActiveView()->m_pDoc = m_pDoc;}
相关文章推荐
- MFC建立一个文档视图的工程,然后在窗口上显示数据
- MFC MDI项目如何一个文档显示多个不同视图类(比如文字和图表,各自拥有单独的框架窗口)
- 解决Excel2010打开文档时只在一个窗口显示的问题
- 打开多个Excel2010文档在同一个窗口中显示问题如何解决
- 多窗口文档初始化只显示主界面不打开任何视图
- 多文档的一些操作:启动时不自动打开一个空文档、启动时主窗体最大化显示、打开一个子窗体时最大化显示
- 遇到Word2007 只能打开一个文档,切换窗口再回去鼠标也不能用。解决问题
- 【办公技巧】Word在一个窗口中显示多个文档
- C#打开WORD文档内容并显示(未完善表格图片等排版显示的处理)
- 创建一个如下的窗体,并在窗体上放置两个按钮(button1、button2)、一个标签(label1,用于显示所选图片路径和文件名)、一个图片框(pictureBox1,用于显示所选图片)、一个打开对
- 帮助文档.chm能打开但是显示不出来详细内容
- EXECL打开多个文件时不在任务栏上只显示一个文件窗口
- IE8浏览器访问百度首页,输入关键字,点击“百度一下”,搜索内容出现在一个自动打开的新窗口的问题的一个原因
- 通过使用浏览器对象模型,输出当前浏览器窗口中打开的文档的URL信息,并将显示在窗口中。
- (转)用eclipse创建一个j2ee的web工程后,左面projects窗口中的项目如何没有显示webRoot文件夹,除了src的文件夹,其他都不显示
- Java_基础—GUI(创建一个窗口并显示/布局管理器)
- 用shell脚本写出检测/tmp/size.log文件,如果存在显示它的内容,不存在则创建一个文件将创建时间写入
- C#中出现了一个问题,就是程序主窗体已经打开,在调用子窗体时候出现了创建窗口句柄时出错。
- winform窗口内容多,加了滚动条,窗口一打开会自动显示到窗口最下方
- C#打开WORD文档内容并显示(未完善表格图片等排版显示的处理)