我在MainFrm中,定义View类的指针,然后在CreatClient函数中,加入如下代码:
m_pRTHelloView = new CRTHelloView;
m_pRTHelloView->Create(NULL, NULL, 0L, rect, this, VIEW_HELLO, pContext);
SetActiveView(m_pRTHelloView);
m_pRTHelloView->ShowWindow(SW_SHOW);
m_pRTHelloView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_nCurrentViewID = VIEW_HELLO;m_pRTTableView = new CRTTableView;
m_pRTTableView->Create(NULL, NULL, 0L, rect, this, VIEW_TABLE, pContext);
m_pRTTableView->ShowWindow(SW_HIDE);
m_pRTTableView->SetDlgCtrlID(VIEW_TABLE);
然后定义SwitchView函数:
CView* pOldActiveView = GetActiveView();
CView* pNewActiveView = NULL;
CView* pOtherView1=NULL;switch (nView)
{
case VIEW_TABLE:
        pNewActiveView = (CView*) m_pRTTableView;
        pOtherView1=(CView*)m_pRTHelloView;
case     VIEW_HELLO:
        pNewActiveView = (CView*)m_pRTHelloView;
        pOtherView2=(CView*)m_pRTTableView;
}
if (pNewActiveView)
{
   if (pOldActiveView == pNewActiveView) return;
   SetActiveView(pNewActiveView);
   pNewActiveView->ShowWindow(SW_SHOW);
   pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
   pOtherView1->ShowWindow(SW_HIDE);
   pOtherView1->SetDlgCtrlID(m_nCurrentViewID);
}
然后定义按钮的消息响应函数:
如:
OnTable()
{ UINT nView = 0;
nView = VIEW_TABLE;
SwitchToView(nView);
}
OnHello()
{ UINT nView = 0;
nView = VIEW_HELLO;
SwitchToView(nView);
}
以上代码适用于CView类,但是如果我将其中一个View更改为CFormView,那么在Create的时候就会报错,由于CFormView的Create函数是protected类型,不能调用,但是如果不加入Create语句,则执行到ShowWindow(SW_HIDE)时就会出现非法操作。
请大家帮帮忙,怎样切换FormView。谢谢