您的位置:首页 > 其它

创建一个新的视图窗口来显示已打开的文档中的内容

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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐