我在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。谢谢
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。谢谢
覆盖他的Create函数为public
在你的程序中切换到继承类