Article ID: 141499
Article Last Modified on 11/21/2006
SPLIT32 (SDI)
COLLECT (MDI)
ENROLL (SDI)
VSWAP32 (SDI)
119591 How to Obtain Microsoft Support Files from Online Services
119591 How to Obtain Microsoft Support Files from Online Services
BOOL CFrame::ReplaceView(CRuntimeClass * pViewClass)
{
CCreateContext context;
CView * pCurrentView;
// If no active view for the frame, return FALSE because
// thisfunction retrieves the current document from the active
// view.
if ((pCurrentView=GetActiveView())==NULL)
return FALSE;
// If we're already displaying this kind of view, no need
// to go further.
if ((pCurrentView->IsKindOf(pViewClass))==TRUE)
return TRUE;
// Get pointer to CDocument object so that it can be used
// in the creation process of the new view.
CDocument * pDoc= pCurrentView->GetDocument();
// Set flag so that document will not be deleted when
// view is destroyed.
BOOL bAutoDelete=pDoc->m_bAutoDelete;
pDoc->m_bAutoDelete=FALSE;
// Delete existing view
pCurrentView->DestroyWindow();
// restore flag
pDoc->m_bAutoDelete=bAutoDelete;
// Create new view and redraw.
context.m_pNewViewClass=pViewClass;
context.m_pCurrentDoc=pDoc;
context.m_pNewDocTemplate=NULL;
context.m_pLastView=NULL;
context.m_pCurrentFrame=this;
CView * pNewView = (CView *) pViewClass->CreateObject();
if (pNewView == NULL)
{
TRACE1("Warning: Dynamic create of view type %Fs
failed\n", pViewClass->m_lpszClassName);
return FALSE;
}
if (!pNewView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0,0,0,0), this, AFX_IDW_PANE_FIRST,
&context))
{
TRACE0("Warning: couldn't create view for frame\n");
return FALSE; // Programmer can assume FALSE return value
// from this function means that there
// isn't a view.
}
// WM_INITIALUPDATE is define in AFXPRIV.H.
pNewView->SendMessage(WM_INITIALUPDATE, 0, 0);
RecalcLayout();
pNewView->UpdateWindow();
SetActiveView(pNewView);
return TRUE;
}
The function receives a pointer to CRuntimeClass object for the new
view that is desired. It destroys the old view and replaces it with a new view
of the same CDocument. When DestroyWindow() is called for the old view, this
causes a "delete this" in the CView::PostNcDestroy() function. Also, the
CView::~CView destructor calls CView::RemoveView(), which removes the view from
the document's view list. 102829 Replacing a View in a CMDIChildWnd Window
Additional query words: MDI Vwrplc32 Vwrplc32vcnet
Keywords: kbdownload kbcode kbdocview kbfile kbmdi kbsample KB141499