视图切换 出错
在网上找了一段代码。用过来实现单文档多视图的切换。
每次调用都有内存不能访问的异常发生。
void CMainFrame::SwitchToView(int nForm)
{
//view
CView *pOldActiveView; //保存旧视图
CView *pNewActiveView;
//CDocument* pDoc = GetActiveDocument();
pOldActiveView = GetActiveView(); //保存旧视图
pNewActiveView = (CView*)GetDlgItem(nForm); //取得新视图
if(pNewActiveView==NULL)
{
switch(nForm)
//这些ID是对话框的标志符,但也可以用其他的标志
{
case IDD_PERSONAL_FORM:
pNewActiveView=(CView*)new CStudentView;
break;
case IDD_COURSEINFO_FORM:
pNewActiveView=(CView*)new CCourseInfoView;
break;
}
CCreateContext context; //将文挡和视图相连
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, WS_CHILD ,
CFrameWnd::rectDefault, this, nForm, &context);
pNewActiveView->OnInitialUpdate();
}
if(pNewActiveView->GetRuntimeClass() == RUNTIME_CLASS(CStudentView))
pOldActiveView->SetDlgCtrlID(IDD_PERSONAL_FORM);
else if(pNewActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CCourseInfoView))
pOldActiveView->SetDlgCtrlID(IDD_COURSEINFO_FORM);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
SetActiveView(pNewActiveView); //改变活动的视图
pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图
pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图
CString title;
title.Format("已登录:%s", m_sCurUser);
pNewActiveView->GetDocument()->SetTitle(title);
delete pOldActiveView; //删除旧视图
RecalcLayout(); //调整框架窗口
}
在调试时出错后指向这一句:
pNewActiveView->Create(NULL, NULL, WS_CHILD ,
CFrameWnd::rectDefault, this, nForm, &context);
下边输出如下:
- pOldActiveView 0x004d2540 {CStudentView hWnd=???}
救命啊,我不知道是哪里出了问题了。 {CStudentView hWnd=???}这个是什么意思呀??