15,978
社区成员
发帖
与我相关
我的任务
分享
void CMainFrame::OnSwitchViews() // button
{
// TODO: Add your command handler code here
CView *pOldView=(CView *)GetActiveView();
//CHexView
if(pOldView->IsKindOf(RUNTIME_CLASS(CWinOh51View)))
{
SwitchViews(2);//CFormatView
}
else if (pOldView->IsKindOf(RUNTIME_CLASS(CFormatView)))
{
SwitchViews(3);//CFlashView
}
else if (pOldView->IsKindOf(RUNTIME_CLASS(CFlashView)))
{
SwitchViews(4);//CHexView
}
else //(pOldView->IsKindOf(RUNTIME_CLASS(CHexView)))
{
SwitchViews(1);//CWinOh51View
}
}
//
// CMainFrame message handlers
void CMainFrame::SwitchViews(int ID)
{
CView* pOldActiveView = GetActiveView();
CView* pNewActiveView;
CCreateContext cc;
cc.m_pCurrentDoc=pOldActiveView->GetDocument();
CString title=cc.m_pCurrentDoc->GetPathName();;
// which one
switch (ID)
{
case 1://
pNewActiveView=(CView*) new CWinOh51View;
title += " Binary View";
break;
case 2://
pNewActiveView=(CView*) new CFormatView;
title += " Formated View";
break;
case 3://
pNewActiveView=(CView*) new CFlashView;
title += " Flash View";
break;
case 4://
pNewActiveView=(CView*) new CHexView;
title += " Hex View";
break;
}
// Create new
pNewActiveView->Create(0,0,0,CFrameWnd::rectDefault,this,ID,&cc);
pNewActiveView->OnInitialUpdate();
SetActiveView(pNewActiveView);
pNewActiveView->ShowWindow(SW_SHOW);
// Exchange view's window ID so RecalcLayout() works.
SetWindowLong(pNewActiveView->m_hWnd, GWL_ID,AFX_IDW_PANE_FIRST);
RecalcLayout();
//If we use: delete pOldActiveView,
//we got : Warning: calling DestroyWindow in CWnd::~CWnd,
//OnDestroy or PostNcDestroy in derived class will not be called.
pOldActiveView->DestroyWindow();
// new title
SetWindowText(title);
}