如何使用在某个“文档模板”中确定的视图、框架窗口来打开一个新视图?

本文详细介绍了如何在MFC应用程序中使用EkCreateNewWindow函数创建新的框架窗口,并关联指定的文档对象。此外,还提供了CDocTemplate::CreateNewFrame函数的工作流程说明,帮助读者理解MFC中框架窗口和视图的创建过程。

程序清单如下所示:

 

第一步:实现EkCreateNewWindow()函数

 

//创建基于“pTemplate文档模板”的新视图,并与pDocument关联

CFrameWnd* EkCreateNewWindow( CDocTemplate* pTemplate , Document* pDocument )
{
      ASSERT_VALID( pTemplate );
      ASSERT_VALID( pDocument );

 

      // 1 - 创建新的框架窗口(还有他的子窗口)     
     CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument , NULL );
      if( pFrame == NULL )
     {
          // 窗口创建失败        

          TRACE0( "Warning: failed to create new frame./n" );
          return NULL;
     }
     ASSERT_KINDOF( CFrameWnd, pFrame );

 

 

      // 2 - 告诉框架窗口自我更新

      pTemplate->InitialUpdateFrame( pFrame, pDocument );

 

 

     // 3 -返回新框架窗口对象的指针

     return pFrame;

}

 

第二步:当要为一个已有的文档对象打开新视图时,使用与下面代码相似的代码段

CDocument* pDoc;

//...

//使pDoc指向要打开新视图的文档对象

//...

EkCreateNewWindow(theApp->m_ptYourTemplate , pDoc);

第三步:当用户选择相应的菜单命令或工具按钮时,应用程序创建 某一文档 的各种类型的视图,一般在文档类中处理这些命令

void CDrawDoc::OnWindowNewView()

{  

}

编码工作到此结束--------------------------------

附件注释:

关于以上程序代码中的函数CDocTemplate::CreateNewFrame()的一些说明:

实际上EkCreateNewWindow()函数就是利用这个函数来创建新的框架/视图对。

下面是CDocTemplate::CreateNewFrame()函数的伪代码:

CFrameWnd* CDocTemplate::CreateNewFrame(CDocument* pDoc , CFrameWnd* pOther)

{

      //1、准备上下文对象

      CCreateContext context;

      context.m_pCurrentFrame=pOther;

      context.m_pCurrentDoc=pDoc;

      context.m_pNewViewClass=m_pViewClass;

      context.m_pNewDocTemplate=this;

      2、创建框架窗口的C++对象

      CFrameWnd* pFrame=(CFrameWnd*)m_pFrameClass->CreateObject();

      3、调用LoadFrame()虚函数创建Windows窗口对象,并装载相关的资源

      pFrame->LoadFrame(m_nIDResource , WS_OVERLAPPEDWINDOW | WS_ADDTOTITLE , NULL , &context );

      return pFrame;

     

}

 

      EkCreateNewWindow(theApp.m_ptYourTemplate , this);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值