void ChangeFrameView(CFrameWnd *pFrame, CRuntimeClass *pNewView)
{
ASSERT(pFrame);
ASSERT(pNewView);
// 获取当前视图
CView* pCurrentView = pFrame->GetActiveView();
// 保存当前视图位置
CRect rcView;
pCurrentView->GetWindowRect(&rcView);
// 获得当前视图相关的文档
CDocument* pDoc;
pDoc = pCurrentView->GetDocument();
// 保持文挡状态,防止释放视图的时候自动释放掉
BOOL bSaveDocument = pDoc->m_bAutoDelete;
pDoc->m_bAutoDelete = FALSE;
// 释放当前视图
pCurrentView->DestroyWindow();
// 恢复文挡状态创建新的上下文
pDoc->m_bAutoDelete = bSaveDocument;
//创建新的上下文
CCreateContext context;
context.m_pCurrentFrame = NULL;
context.m_pLastView = NULL;
context.m_pNewDocTemplate = NULL;
context.m_pCurrentDoc = pDoc;
context.m_pNewViewClass = pNewView;
// 创建视图
CView* pNewCreateView =static_cast
<CView*>(pFrame->CreateView(&context));
// 移动视图到原来视图位置
pFrame->ScreenToClient(&rcView);
pNewCreateView->MoveWindow(&rcView);
// 更新
pFrame->InitialUpdateFrame(pDoc, TRUE);
}
{
ASSERT(pFrame);
ASSERT(pNewView);
// 获取当前视图
CView* pCurrentView = pFrame->GetActiveView();
// 保存当前视图位置
CRect rcView;
pCurrentView->GetWindowRect(&rcView);
// 获得当前视图相关的文档
CDocument* pDoc;
pDoc = pCurrentView->GetDocument();
// 保持文挡状态,防止释放视图的时候自动释放掉
BOOL bSaveDocument = pDoc->m_bAutoDelete;
pDoc->m_bAutoDelete = FALSE;
// 释放当前视图
pCurrentView->DestroyWindow();
// 恢复文挡状态创建新的上下文
pDoc->m_bAutoDelete = bSaveDocument;
//创建新的上下文
CCreateContext context;
context.m_pCurrentFrame = NULL;
context.m_pLastView = NULL;
context.m_pNewDocTemplate = NULL;
context.m_pCurrentDoc = pDoc;
context.m_pNewViewClass = pNewView;
// 创建视图
CView* pNewCreateView =static_cast
<CView*>(pFrame->CreateView(&context));
// 移动视图到原来视图位置
pFrame->ScreenToClient(&rcView);
pNewCreateView->MoveWindow(&rcView);
// 更新
pFrame->InitialUpdateFrame(pDoc, TRUE);
}