新视图有一个计时器,每秒调用一次ondraw函数,但是切换后的视图不自动执行Ondraw函数,怎样切换能解决这个问题。下边是我现在切换视图用的代码
void CMainFrame::switchform(int nID)
{CView *pOldActiveView=GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nID); //取得新视图 CCreateContext context; if(pNewActiveView==NULL)
{ switch(nID)
//这些ID是对话框的标志符,但也可以用其他的标志
{
case IDD_DIALOG1 :
pNewActiveView=(CView*)new dlgview;
context.m_pNewViewClass=RUNTIME_CLASS(dlgview);
break;
case IDD_DIALOG2 :
pNewActiveView=(CView*)new dlgview2;
context.m_pNewViewClass=RUNTIME_CLASS(dlgview2);
break;
case IDD_DIALOG5 :
pNewActiveView=(CView*)new dlgview22;
context.m_pNewViewClass=RUNTIME_CLASS(dlgview22);
break;
case IDD_DIALOG4 :
pNewActiveView=(CView*)new dlgview4;
context.m_pNewViewClass=RUNTIME_CLASS(dlgview4);
break;
}// CCreateContext context; //将文挡和视图相连
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, WS_CHILD|WS_VISIBLE ,
CFrameWnd::rectDefault, this, nID, &context);
//context.m_pNewViewClass=RUNTIME_CLASS(dlgview2);
pNewActiveView->OnInitialUpdate();
} SetActiveView(pNewActiveView); //改变活动的视图
pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图
pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(dlgview))
pOldActiveView->SetDlgCtrlID(IDD_DIALOG1); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(dlgview2))
pOldActiveView->SetDlgCtrlID(IDD_DIALOG2); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(dlgview22))
pOldActiveView->SetDlgCtrlID(IDD_DIALOG5);
else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(dlgview4))
pOldActiveView->SetDlgCtrlID(IDD_DIALOG4);
int nSwitchChildID = pNewActiveView->GetDlgCtrlID();
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);//pOldActiveView->ShowWindow(SW_HIDE);
delete pOldActiveView; //删除旧视图
RecalcLayout(); //调整框架窗口
}
void CMainFrame::switchform(int nID)
{CView *pOldActiveView=GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nID); //取得新视图 CCreateContext context; if(pNewActiveView==NULL)
{ switch(nID)
//这些ID是对话框的标志符,但也可以用其他的标志
{
case IDD_DIALOG1 :
pNewActiveView=(CView*)new dlgview;
context.m_pNewViewClass=RUNTIME_CLASS(dlgview);
break;
case IDD_DIALOG2 :
pNewActiveView=(CView*)new dlgview2;
context.m_pNewViewClass=RUNTIME_CLASS(dlgview2);
break;
case IDD_DIALOG5 :
pNewActiveView=(CView*)new dlgview22;
context.m_pNewViewClass=RUNTIME_CLASS(dlgview22);
break;
case IDD_DIALOG4 :
pNewActiveView=(CView*)new dlgview4;
context.m_pNewViewClass=RUNTIME_CLASS(dlgview4);
break;
}// CCreateContext context; //将文挡和视图相连
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, WS_CHILD|WS_VISIBLE ,
CFrameWnd::rectDefault, this, nID, &context);
//context.m_pNewViewClass=RUNTIME_CLASS(dlgview2);
pNewActiveView->OnInitialUpdate();
} SetActiveView(pNewActiveView); //改变活动的视图
pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图
pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(dlgview))
pOldActiveView->SetDlgCtrlID(IDD_DIALOG1); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(dlgview2))
pOldActiveView->SetDlgCtrlID(IDD_DIALOG2); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(dlgview22))
pOldActiveView->SetDlgCtrlID(IDD_DIALOG5);
else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(dlgview4))
pOldActiveView->SetDlgCtrlID(IDD_DIALOG4);
int nSwitchChildID = pNewActiveView->GetDlgCtrlID();
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);//pOldActiveView->ShowWindow(SW_HIDE);
delete pOldActiveView; //删除旧视图
RecalcLayout(); //调整框架窗口
}
可能是你的定时器属于某一个view了吧,对其他view无效而已!