15,979
社区成员
发帖
与我相关
我的任务
分享
m_pView = (CView*)((CMainFrame*)m_pMainWnd)->GetActiveView();
m_pFormView = (CView*)new CMyFormView;
CCreateContext context;
context.m_pCurrentDoc = ((CMainFrame*)m_pMainWnd)->GetActiveDocument();
UINT uid = AFX_IDW_PANE_FIRST + 1;
CRect rt;
m_pFormView->Create(NULL, NULL, WS_CHILD, rt, m_pMainWnd, uid, &context);
void CSDIMultiViewApp::ShowView(void)
{
LONG lId = GetWindowLong(m_pView->m_hWnd, GWL_ID);
::SetWindowLong(((CMainFrame*)m_pMainWnd)->GetActiveView()->m_hWnd, GWL_ID,
GetWindowLong(((CMainFrame*)m_pMainWnd)->m_hWnd, GWL_ID));
::SetWindowLong(m_pView->m_hWnd, lId, GWL_ID);
::ShowWindow(((CMainFrame*)m_pMainWnd)->GetActiveView()->m_hWnd, SW_HIDE);
((CMainFrame*)m_pMainWnd)->SetActiveView(m_pView);
((CMainFrame*)m_pMainWnd)->RecalcLayout();
::ShowWindow(m_pView->m_hWnd, SW_SHOWMAXIMIZED);
}
void CSDIMultiViewApp::ShowForm(void)
{
LONG lId = GetWindowLong(m_pFormView->m_hWnd, GWL_ID);
::SetWindowLong(((CMainFrame*)m_pMainWnd)->GetActiveView()->m_hWnd, GWL_ID,
GetWindowLong(((CMainFrame*)m_pMainWnd)->m_hWnd, GWL_ID));
::SetWindowLong(m_pFormView->m_hWnd,lId, GWL_ID);
//SetWindowLong(m_pFormView->m_hWnd,lId, GWL_ID)最後兩個參數有問題吧?
::ShowWindow(((CMainFrame*)m_pMainWnd)->GetActiveView()->m_hWnd, SW_HIDE);
((CMainFrame*)m_pMainWnd)->SetActiveView(m_pFormView);
((CMainFrame*)m_pMainWnd)->RecalcLayout();
::ShowWindow(m_pFormView->m_hWnd, SW_SHOWMAXIMIZED);
//这些代码能解释下不?
}
void CMainFrame::SwitchViews(int nForm)
{
CView* pOldView = GetActiveView();
CView* pNewView;
CCreateContext cc;
cc.m_pCurrentDoc = pOldView->GetDocument();
CString title;
switch(nForm)
{
case IDD_NEWFORM:
pNewView = (CView*) new CNewform;
title+=_T("New form");
break;
case IDD_CHANGEFORM2_FORM:
pNewView = (CView*) new Cchangeform2View;
title+= _T("Original view");
break;
}
pNewView->Create(NULL,NULL,WS_CHILD|WS_BORDER,CFrameWndEx::rectDefault,
this,nForm,&cc);
pNewView->OnInitialUpdate();
SetActiveView(pNewView);
pNewView->ShowWindow(SW_SHOW);
SetWindowLong(pNewView->m_hWnd,GWL_ID,AFX_IDW_PANE_FIRST);
RecalcLayout();
pOldView->DestroyWindow();
SetWindowText(title);
}
void CMainFrame::OnMenuOrig()
{
// TODO: 在此添加命令处理程序代码
CView *pOldView=(CView *)GetActiveView();
if (pOldView->GetRuntimeClass()==RUNTIME_CLASS(Cchangeform2View))
{
return;
}
SwitchViews(IDD_CHANGEFORM2_FORM);
}
void CMainFrame::OnNewView()
{
// TODO: 在此添加命令处理程序代码
CView *pOldView=(CView *)GetActiveView();
if (pOldView->GetRuntimeClass()==RUNTIME_CLASS(CNewform))
{
return;
}
SwitchViews(IDD_NEWFORM);
}
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 window ID's 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);
}
//
void CMainFrame::OnSwitchViews()
{
// 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
}
}