请教SDI程序中如何切换视??非切分窗口 最好能提供一个例子,谢谢帮忙。网上找到的都是切分窗口中切换视 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在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);} 上面代码似乎不适用于FormView,目前还没有找到解决方法。 FormView的问题也已解决,重载FormView的Create函数即可 void CMainFrame::OnViewSwitch() { CDocument* pDoc = GetActiveDocument(); CView* pCurrView=GetActiveView(); // CView* pNewView; if(m_nCurrentView ==0) { /* pNewView =(CView*) new CGenerateView; m_nCurrentView =1; */ if(m_pGenerateView ==NULL) { m_pScheduleSimView =pCurrView; m_pGenerateView =(CView*) new CGenerateView; m_pGenerateView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1,NULL); int nId = m_pGenerateView->GetDlgCtrlID(); m_pGenerateView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); m_pScheduleSimView->SetDlgCtrlID(nId); m_pGenerateView->OnInitialUpdate(); m_pGenerateView->ShowWindow(SW_SHOW); pCurrView->ShowWindow(SW_HIDE); pDoc->AddView(m_pGenerateView); } else { int nId = m_pGenerateView->GetDlgCtrlID(); m_pGenerateView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); m_pScheduleSimView->SetDlgCtrlID(nId); m_pGenerateView->ShowWindow(SW_SHOW); pCurrView->ShowWindow(SW_HIDE); } SetActiveView(m_pGenerateView); m_nCurrentView =1; } else { /* pNewView =(CView*) new CScheduleSimView; m_nCurrentView =0; */ int nId = m_pScheduleSimView->GetDlgCtrlID(); m_pScheduleSimView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); m_pGenerateView->SetDlgCtrlID(nId); m_pScheduleSimView->ShowWindow(SW_SHOW); m_pGenerateView->ShowWindow(SW_HIDE); SetActiveView(m_pScheduleSimView); m_nCurrentView =0; }/* pNewView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST,NULL); pNewView->OnInitialUpdate(); pNewView->ShowWindow(SW_SHOW); pCurrView->ShowWindow(SW_HIDE); pDoc->AddView(pNewView); pDoc->RemoveView(pCurrView); SetActiveView(pNewView); RecalcLayout(); */ RecalcLayout();} OCX 控件中 无模式对话框无法响应Tab按键 用ZwReadFile读取文件内容,如何得到该文件的总大小 请问什么原因会影响cab正常安装。。 如何创建非模态的打开文件对话框? 请使用过CXImage的大侠们指教一下~有几个小问题。 用Delphi编写的如何翻译成C语言,赋有源码,在线等!谢谢! 大虾,救命! 估算不规则图像的周长 请教一个关于lib库冲突的问题 高分悬赏NT/Win2000系统启动类型判断 在ListCtrl中,怎样获得"右键点击列表控键的顶部按钮"消息?可在弹出的菜单中选中一项,该项加入到列表控键的顶部按钮? 我想知道有关下降递归分析法的算法
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);
}
void CMainFrame::OnViewSwitch()
{
CDocument* pDoc = GetActiveDocument();
CView* pCurrView=GetActiveView();
// CView* pNewView; if(m_nCurrentView ==0)
{
/*
pNewView =(CView*) new CGenerateView;
m_nCurrentView =1;
*/
if(m_pGenerateView ==NULL)
{
m_pScheduleSimView =pCurrView;
m_pGenerateView =(CView*) new CGenerateView;
m_pGenerateView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1,NULL);
int nId = m_pGenerateView->GetDlgCtrlID();
m_pGenerateView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_pScheduleSimView->SetDlgCtrlID(nId);
m_pGenerateView->OnInitialUpdate();
m_pGenerateView->ShowWindow(SW_SHOW);
pCurrView->ShowWindow(SW_HIDE);
pDoc->AddView(m_pGenerateView);
}
else
{
int nId = m_pGenerateView->GetDlgCtrlID();
m_pGenerateView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_pScheduleSimView->SetDlgCtrlID(nId);
m_pGenerateView->ShowWindow(SW_SHOW);
pCurrView->ShowWindow(SW_HIDE);
}
SetActiveView(m_pGenerateView);
m_nCurrentView =1;
}
else
{
/* pNewView =(CView*) new CScheduleSimView;
m_nCurrentView =0;
*/
int nId = m_pScheduleSimView->GetDlgCtrlID();
m_pScheduleSimView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_pGenerateView->SetDlgCtrlID(nId);
m_pScheduleSimView->ShowWindow(SW_SHOW);
m_pGenerateView->ShowWindow(SW_HIDE);
SetActiveView(m_pScheduleSimView);
m_nCurrentView =0;
}
/* pNewView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST,NULL);
pNewView->OnInitialUpdate(); pNewView->ShowWindow(SW_SHOW);
pCurrView->ShowWindow(SW_HIDE); pDoc->AddView(pNewView);
pDoc->RemoveView(pCurrView); SetActiveView(pNewView);
RecalcLayout();
*/
RecalcLayout();
}