(转)视口切换技术

在windows中,当需要显示多个实时的视口时,视图之间的切换是不可避免的,以下为

一个事例:

CMainFrame::SwitchToView(eView nView)
{
 CAD_HOC_Doc *pDoc = (CAD_HOC_Doc*)GetActiveDocument();
    CView* m_pOldView=GetActiveView();
    switch (nView) {
  case GRAPHIC:
    if(m_pOldView->IsKindOf(RUNTIME_CLASS(CAD_HOC_View))!=0)
     MessageBeep(-1);
    else{
    m_pOldView->ShowWindow(SW_HIDE);
    m_pGraphView->ShowWindow(SW_SHOW);
    m_pGraphView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    m_pOldView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
    SetActiveView(m_pGraphView);
    this->RecalcLayout();
    }
    break;
  case STATISTIC:
    if(m_pStatisticView==0)
    {
     m_pStatisticView=(CView *)new CAdHocStatisticView;
     CCreateContext context;
     context.m_pCurrentDoc = pDoc;
     m_pStatisticView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1, &context);
    }  
    if(m_pOldView->IsKindOf(RUNTIME_CLASS(CAdHocStatisticView))!=0)
     MessageBeep(-1);
    else
    {
    m_pOldView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
    m_pStatisticView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    m_pStatisticView->ShowWindow(SW_SHOW);
    m_pOldView->ShowWindow(SW_HIDE);
    SetActiveView(m_pStatisticView);
    this->RecalcLayout();
    }
    break;

  case DROP:
             if(m_pDrop==0)
    {
       m_pDrop=(CView *)new COutput_Drop;
       CCreateContext context;
       context.m_pCurrentDoc= pDoc;
       m_pDrop->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1, &context);
    }
    if(m_pOldView->IsKindOf(RUNTIME_CLASS(COutput_Drop))!=0)
     MessageBeep(-1);
    else
    {
    m_pOldView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
    m_pDrop->SetDlgCtrlID(AFX_IDW_PANE_FIRST);   
    m_pDrop->ShowWindow(SW_SHOW);
    m_pOldView->ShowWindow(SW_HIDE);
    SetActiveView(m_pDrop);
    this->RecalcLayout();
    }
    break; 
  case PTOPDELAY:
       if(m_pPtopdelay==0)
      {
      m_pPtopdelay=(CView *)new COutput_Ptopdelay;
       CCreateContext context;
       context.m_pCurrentDoc= pDoc;
       m_pPtopdelay->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1, &context);
      }
                if(m_pOldView->IsKindOf(RUNTIME_CLASS(COutput_Ptopdelay))!=0)
     MessageBeep(-1);
    else
    {
    m_pOldView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
    m_pPtopdelay->SetDlgCtrlID(AFX_IDW_PANE_FIRST);   
    m_pPtopdelay->ShowWindow(SW_SHOW);
    m_pOldView->ShowWindow(SW_HIDE);
    SetActiveView(m_pPtopdelay);
    this->RecalcLayout();
    }
    break;
  case THROUGHPUT:
       if(m_pThroughput==0)
      {
      m_pThroughput=(CView *)new COutput_Throughput;
       CCreateContext context;
       context.m_pCurrentDoc= pDoc;
       m_pThroughput->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1, &context);
      }
    if(m_pOldView->IsKindOf(RUNTIME_CLASS(COutput_Throughput))!=0)
     MessageBeep(-1);
    else
    {
    m_pOldView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
    m_pThroughput->SetDlgCtrlID(AFX_IDW_PANE_FIRST);   
    m_pThroughput->ShowWindow(SW_SHOW);
    m_pOldView->ShowWindow(SW_HIDE);
    SetActiveView(m_pThroughput);
    this->RecalcLayout();
    }
    break;
   case JITTER:
       if(m_pJitter==0)
      {
      m_pJitter=(CView *)new COutput_Jitter;
       CCreateContext context;
       context.m_pCurrentDoc= pDoc;
       m_pJitter->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1, &context);
      }
    if(m_pOldView->IsKindOf(RUNTIME_CLASS(COutput_Jitter))!=0)
     MessageBeep(-1);
    else
    {
    m_pOldView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
    m_pJitter->SetDlgCtrlID(AFX_IDW_PANE_FIRST);   
    m_pJitter->ShowWindow(SW_SHOW);
    m_pOldView->ShowWindow(SW_HIDE);
    SetActiveView(m_pJitter);
    this->RecalcLayout();
    }
    break;
 } 
}

转载于:https://www.cnblogs.com/bestwolf1983/archive/2010/01/04/1638990.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值