单文档切分窗口中视图切换

在MS Windows 中,一个窗口可以分割成若干个子窗口,每一个子窗口称作一个窗片(pane),每个窗片可以独立控制,这给界面设计提供了很大的方便。  

 利用VC 可以很方便地实现分割窗口。分割的方法有两种:动态和静态。动态分割时可以根据用户的需要分割成数目不同的窗片,但所有窗片的属性和父窗口都是一样的;而静态分割的窗片的数目在程序中指定,运行时是固定的,但每个窗片可以有各自不同类型的视(View),因此其使用范围更为广泛。本文所讨论的问题仅限于静态分割。  

 窗片中视的类型大多是在主窗口的创建过程中指定的。这也就意味着,一个窗片虽然可以显示任意类型的视,但是这种类型一旦确定,在程序运行过程中就难以改变。  

 一、我要的是这样的!   但是我们有时确实需要改变一个窗片所显示的视的类型,也就是说,需要让一个窗片显示多种类型的视。例如一个窗口被分割成两部分,一边是命令窗口,另一边是工作窗口,根据命令窗口中发出的不同命令,需要变换不同的工作类型,这就需要工作窗口中能够显示多种类型的视窗,那么,如何做到这一点呢?  

 二、你可以这样做! 下面我们来看如何在右窗片内进行两类视间的切换。实际上,由视A 切换到视B 的原理很简单,那就是:  

 1. 从窗片中删除视A;   

2. 往窗片中添加视B。  

 步骤1 的实现非常简单,仅用一条语句即可:   m_wndSplitter.DeleteView(0, 1);   但它是必不可少的,因为你不能让一个窗片同时包含两个视。我本来希望往一个窗片中添加新的视时,VC 会自动将原来的视删掉,可是它不干。

1.切分窗口

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) {

// TODO: Add your specialized code here and/or call the base class if(wndSplitter.CreateStatic(this,1,2)==NULL)return FALSE;

wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView3),CSize(300,300),pContext);

wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView4),CSize(100,100),pContext);

return TRUE; }

2。视图切换

void CMainFrame::SwitchToForm(CRuntimeClass *pRTClass) {

wndSplitter.DeleteView0,1); 创建新的视

CCreateContext Context;

Context.m_pNewViewClass=pRTClass;// // 视类

Context.m_pCurrentDoc = GetActiveDocument(); // 与文档连接

wndSplitter.CreateView(0,1, pRTClass,CSize(200,200),&Context); /*

CView * pView = (CView *)wndSplitter.GetPane(0,1); // 获取分割区域

pView->ShowWindow(SW_SHOW);

pView->OnInitialUpdate();

SetActiveView(pView);

wndSplitter.SetRowInfo(0, 300, 20); // 设置宽度

::SetWindowLong(pView->m_hWnd,GWL_ID, AFX_IDW_PANE_FIRST); */ wndSplitter.RecalcLayout(); }
-->
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值