VC小技巧(6)-----单文档多视图实现视图间的切换


在单一文档结构下,可以有多个视图存在,以下代码实现了视图(CFormView为例)间的切换,
使用户在一个时间只能看到一个视图,并且能够切换到自己想要的视图。
要想看到自己想要的视图,只需为以下函数传递相应视图的ID号!



void CMainFrame::SwitchToForm(int nForm)
{

    CView *pOldActiveView=GetActiveView();
    CView *pNewActiveView=(CView*)GetDlgItem(nForm);

    if(pNewActiveView==NULL)
    {
        if(nForm==IDD_LIBRARY_FORM)
        {
            pNewActiveView=(CView*)new CLibraryView;
        }
        if(nForm==IDD_BOOKINFO_FORM)
        {
            pNewActiveView=(CView*)new CBookInfoView;
        }
        if(nForm==IDD_PROVIDER_FORM)
        {
            pNewActiveView=(CView*)new CProviderView;
        }

        CCreateContext context;
        context.m_pCurrentDoc=pOldActiveView->GetDocument();
        pNewActiveView->Create(NULL,NULL,0L,CFrameWnd::rectDefault,this,nForm,&context);
        pNewActiveView->OnInitialUpdate();
    }

    SetActiveView(pNewActiveView);
    pNewActiveView->ShowWindow(SW_SHOW);
    pOldActiveView->ShowWindow(SW_HIDE);

    int ID;

    if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CLibraryView))
        ID=IDD_LIBRARY_FORM;
    if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CBookInfoView))
        ID=IDD_BOOKINFO_FORM;
    if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CProviderView))
        ID=IDD_PROVIDER_FORM;

    pOldActiveView->SetDlgCtrlID(ID);
    pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);

    RecalcLayout();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值