单文档程序.有view1和view2,view1和view2的内容都已经定义完。
view1是当前view,在其它类中有一个线程,动态创建view2时出现系统错误,出错语句如下,请问如何解决,应该注意些什么?
也就是想通过线程判断数据,然后view1切换到view2.pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD , CFrameWnd::rectDefault, this, nForm, &context);nForm是view2的ID。感谢!!
view1是当前view,在其它类中有一个线程,动态创建view2时出现系统错误,出错语句如下,请问如何解决,应该注意些什么?
也就是想通过线程判断数据,然后view1切换到view2.pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD , CFrameWnd::rectDefault, this, nForm, &context);nForm是view2的ID。感谢!!
void CMainFrame::SwitchToForm(int nForm) //进行视图切换的代码函数
{
//CDocument* pDoc = GetActiveDocument();
//CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd();
//CWindVoltageWarningView* pView=(CWindVoltageWarningView*)pFrame->GetActiveView(); CView *pOldActiveView=GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图
//CView *pOldActiveView=(CView*)pFrame->GetActiveView(); //保存旧视图
//CView *pNewActiveView=(CView*)pFrame->GetDlgItem(nForm); //取得新视图
if(pNewActiveView==NULL)
{
switch(nForm)
//这些ID是对话框的标志符,但也可以用其他的标志
{
case IDD_WINDVOLTAGEWARNING_VIEW :
pNewActiveView=(CView*)new CWindVoltageWarningView;
break;
case IDD_WINDVOLTAGEWARNING_VIEW1 :
pNewActiveView=(CView*)new CWindVoltageWarningView1;
break;
}
在线程中是这样写的。
CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd();
pFrame->SwitchToForm(IDD_WINDVOLTAGEWARNING_VIEW1);
void CMainFrame::SwitchToForm(int nForm) //进行视图切换的代码函数
{
CView *pOldActiveView=GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图
if(pNewActiveView==NULL)
{
switch(nForm)
//这些ID是对话框的标志符,但也可以用其他的标志
{
case IDD_WINDVOLTAGEWARNING_VIEW :
pNewActiveView=(CView*)new CWindVoltageWarningView;
break;
case IDD_WINDVOLTAGEWARNING_VIEW1 :
pNewActiveView=(CView*)new CWindVoltageWarningView1;
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(CWindVoltageWarningView))
pOldActiveView->SetDlgCtrlID(IDD_WINDVOLTAGEWARNING_VIEW);else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CWindVoltageWarningView1))
pOldActiveView->SetDlgCtrlID(IDD_WINDVOLTAGEWARNING_VIEW1); pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
delete pOldActiveView; //删除旧视图
RecalcLayout(); //调整框架
}