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

当调用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;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值