VC中实现单文档切换多视图的方法

先在CMainFrame中包含原来系统生成的视图类
#include "****View.h"
注:当你包含系统生成的视图类的头文件时,要把原视图中的GetDocument()函数删去,否则会报错
然后在CMainFrame类中声名一个该类的实例以保存系统原来的视图
protected:
    C****View m_pOldView;
这时用类向导新建一个类,基类可以指定为CView;
注:在派生的类中,一定要把构造函数从 protected 改成 public
如果你要使用几个视图就新建几个类
再在CMainFrame类中包含该类的头文件
#include "NewView.h"
再在类中声明一个该类的实例
CNewView *m_pNewView;
在CMainFrame的构造函数中初始化
m_pOldView=NULL; 
m_pNewView=NULL;
因为在CMainFrame的构造函数和OnCreate函数中,视图还没有建立
所以原来的视图可以在切换视图时保存
if(m_pOldView==NULL)
     m_pOlView=(C****View*)GetActiveView();
或者可以在原来的视图里保存,在原来的视图类中包含CMainFrame的头文件
#include "MainFrame.h"
然后在原来的视图的视图中用类向导添加一个虚函数OnInitialUpdate,然后在此函数中保存
CMainFrame *pMainWnd=(CMainFrame*)AfxGetMainWnd();
pMainWnd->m_pOldView=this;
切换视图时,由于该视图还没有建立所以用到下面的语句
if(m_pNewView==NULL)
{
     CCreateContext context;
     context.m_pCurrentDoc=pOldActiveView->GetDocument();
     m_pNewView=new CNewView;
     m_pNewView->Create(NULL,NULL,WS_BORDER|WS_CHILD,CFrameWnd::rectDefault,this,IDV_NEW_VIEW_ID,&context);
     pNewActiveView->OnInitialUpdate(); //IDV_NEW_VIEW_ID是这个视图的ID,这个值可以是常数,如 1,或者在资源视图的String Table中设置,如设为:IDV_NEW_VIEW_ID;
}
切换视图时用下面语句,可以在CMainFrame中设立一个标记,切换视图时检查是否已经切换到这个视图,否则就切换,如果要切换到原来的视图,把m_pNewView换成m_pOldView
SetActiveView(m_pNewView);
m_pNewView->ShowWindow(SW_MAXIMIZED);
m_pOldView->ShowWindow(SW_HIDE);
m_pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
RecalcLayout();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值