为什么开始我连续切换同一视图,却被new了两次?不是只new一次的?(关键问题请看下边的一个函数)
具体如下:例子代码:
http://www.czvc.com/down.asp?id=10--------------------------------------------
其中有代码:
void CMainFrame::SwitchToForm(int nForm) //进行视图切换的代码函数
{
//CDocument* pDoc = GetActiveDocument();
CView *pOldActiveView=(CView*)GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图
if(pNewActiveView==NULL)
{
switch(nForm)
//这些ID是对话框的标志符,但也可以用其他的标志
{
case IDD_MULTIVIEW_FORM :
pNewActiveView=(CView*)new CView1;
break;
case IDD_MULTIVIEW_FORM2 :
pNewActiveView=(CView*)new CView2;
AfxMessageBox("mu");
break;
case IDD_MULTIVIEW_FORM3 :
pNewActiveView=(CView*)new CView3;
break;
case IDD_MULTIVIEW_FORM4 :
pNewActiveView=(CView*)new CView4;
break;
}
CCreateContext context; //将文挡和视图相连
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,
CFrameWnd::rectDefault, this, nForm, &context);
pNewActiveView->OnInitialUpdate();
}
SetActiveView(pNewActiveView); //改变活动的视图
pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图
pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图
if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView1))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView2))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM2); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView3))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM3); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView4))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM4);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
delete pOldActiveView; //删除旧视图
RecalcLayout(); //调整框架窗口
}
---------------------------------------------
本来这个例子每切换一次就new一次的,
但其中我把"delete pOldActiveView; //删除旧视图"去掉了,但结果还是这样.
具体如下:例子代码:
http://www.czvc.com/down.asp?id=10--------------------------------------------
其中有代码:
void CMainFrame::SwitchToForm(int nForm) //进行视图切换的代码函数
{
//CDocument* pDoc = GetActiveDocument();
CView *pOldActiveView=(CView*)GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图
if(pNewActiveView==NULL)
{
switch(nForm)
//这些ID是对话框的标志符,但也可以用其他的标志
{
case IDD_MULTIVIEW_FORM :
pNewActiveView=(CView*)new CView1;
break;
case IDD_MULTIVIEW_FORM2 :
pNewActiveView=(CView*)new CView2;
AfxMessageBox("mu");
break;
case IDD_MULTIVIEW_FORM3 :
pNewActiveView=(CView*)new CView3;
break;
case IDD_MULTIVIEW_FORM4 :
pNewActiveView=(CView*)new CView4;
break;
}
CCreateContext context; //将文挡和视图相连
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,
CFrameWnd::rectDefault, this, nForm, &context);
pNewActiveView->OnInitialUpdate();
}
SetActiveView(pNewActiveView); //改变活动的视图
pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图
pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图
if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView1))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView2))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM2); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView3))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM3); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView4))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM4);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
delete pOldActiveView; //删除旧视图
RecalcLayout(); //调整框架窗口
}
---------------------------------------------
本来这个例子每切换一次就new一次的,
但其中我把"delete pOldActiveView; //删除旧视图"去掉了,但结果还是这样.
LRESULT CMainFrame::OnDoMain(WPARAM wParam,LPARAM lParam) //切换到某个视图
{
m_wndSplitter.DeleteView(0,1);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMainView),CSize(0,0),NULL);
m_wndSplitter.RecalcLayout();
return 0L;
}
http://dev.csdn.net/article/12/12693.shtm
你在那加的MessageBox啊 ?
请在:
case IDD_MULTIVIEW_FORM2 :
pNewActiveView=(CView*)new CView2;
AfxMessageBox("mu");
里加看看好吗?
另外,我看了你给我的那个sample,发现并不符合我的需求,我要的就是在:在切换时,如果没指定所需的pane的话,就"new"且"new pane"只被执行一次,其后就是真正的切换了。--------------------------------------------------------
to flyelf(空谷清音)
我要的就是在:在切换时,如果没指定所需的pane的话,就"new"且"new pane"只被执行一次,其后就是真正的切换了。请问怎么进行一次切换?
请post 一下行吗?
-----------------------
谢谢大家了。
到底执行了几次
已给你发邮件去了。请查收,谢谢。我的ftp下,ftp://kinkia.vicp.net/ 的 MultiView1.rar
------------------------------
问题在于MessageBox在 IDD_MULTIVIEW_FORM2 处会出现两次。
在 IDD_MULTIVIEW_FORM1 处只会出现一次。