SplitterWindow & CTreeView/CFormView , verschiedene Dialoge
-
Hi, also habs schon versucht im Topic zu beschreiben.
Situation: Ich habe ein TreeView und ein FormView.
Je nachdem was in dem TreeView ausgewählt wurde, muss allerdings
ein anderer Dialog geladen werden ...Nur wie bekomme ich das bei CFormView hin ?
Devil
-
Für jedes Dialogtemplate ein CFormView machen und dann -> siehe switching Views bzw. multiple views for one document
-
hm, is auch ne Möglichkeit.
Ich schaus mir mal an
-
Ok, das hat mir erst mal weiter geholfen.
Allerdings funzt es nicht beim Splitter.// CView* pOldActiveView = GetActiveView(); // save old view CView* pNewActiveView = (CView*)GetDlgItem(nForm); // get new view if (pNewActiveView == NULL) { switch(nForm) // these IDs are the dialog IDs of the view but can use anything { case IDD_CLASSBUILDER_FORM: pNewActiveView = (CView*)new CClassBuilderView; break; case IDD_FUNKTIONEN: pNewActiveView = (CView*)new DFunktion; break; case IDD_VAR: pNewActiveView = (CView*)new DVar; } CFrameWnd* pMainWnd = (CFrameWnd*)AfxGetMainWnd(); CView* pOldActiveView = pMainWnd->GetActiveView(); // If we're already displaying this kind of view, no need to go further. //if (pOldActiveView->IsKindOf(pNewActiveView->GetRuntimeClass())) //else CSplitterWnd* pSplitter = (CSplitterWnd *)pOldActiveView->GetParent(); int row= 0, col=1; ASSERT(pSplitter->IsChildPane(pOldActiveView, row, col)); CRect viewrect; pOldActiveView->GetWindowRect(&viewrect); // set flag so that document will not be deleted when view is destroyed // m_bAutoDelete = FALSE; // Delete existing view pOldActiveView->DestroyWindow(); // set flag back to default // m_bAutoDelete = TRUE; // Create new view CCreateContext context; context.m_pNewViewClass = pNewActiveView->GetRuntimeClass(); context.m_pCurrentDoc = pOldActiveView->GetDocument(); context.m_pNewDocTemplate = NULL; context.m_pLastView = NULL; context.m_pCurrentFrame = NULL; if (pSplitter->CreateView(row, col, pNewActiveView->GetRuntimeClass(), viewrect.Size(), &context))//hier kommt der fehler { // Set active CView* pNewView = (CView *)pSplitter->GetPane(row, col); pSplitter->GetParentFrame()->SetActiveView(pNewView); pSplitter->RecalcLayout(); pNewView->SendMessage(WM_PAINT); } }
Devil
[ Dieser Beitrag wurde am 29.01.2003 um 21:28 Uhr von devil81 editiert. ]
[ Dieser Beitrag wurde am 29.01.2003 um 21:31 Uhr von devil81 editiert. ]
-
Hallo,
schau mal bei Codeguru, da gibts ne fertige Klasse, die genau das kann
-
OK, fehler gefunden, in der Doc funktioniert es und nicht in der CMainFrame...
Code:
BOOL CClassBuilderDoc::SwitchToView(CRuntimeClass *pNewViewClass) { CFrameWnd* pMainWnd = (CFrameWnd*)AfxGetMainWnd(); CView* pOldActiveView = pMainWnd->GetActiveView(); // If we're already displaying this kind of view, no need to go further. if (pOldActiveView->IsKindOf(pNewViewClass)) return TRUE; CSplitterWnd* pSplitter = (CSplitterWnd *)pOldActiveView->GetParent(); pOldActiveView = (CView*)pSplitter->GetPane(0,1);//damit er nicht den Falschen View Löscht int row, col; ASSERT(pSplitter->IsChildPane(pOldActiveView, row, col)); CRect viewrect; pOldActiveView->GetWindowRect(&viewrect); // set flag so that document will not be deleted when view is destroyed m_bAutoDelete = FALSE; // Delete existing view pOldActiveView->DestroyWindow(); // set flag back to default m_bAutoDelete = TRUE; // Create new view CCreateContext context; context.m_pNewViewClass = pNewViewClass; context.m_pCurrentDoc = this; context.m_pNewDocTemplate = NULL; context.m_pLastView = NULL; context.m_pCurrentFrame = NULL; if (!pSplitter->CreateView(row, col, pNewViewClass, viewrect.Size(), &context)) return FALSE; // Set active CView* pNewView = (CView *)pSplitter->GetPane(row, col); pSplitter->GetParentFrame()->SetActiveView(pNewView); pSplitter->RecalcLayout(); pNewView->SendMessage(WM_PAINT); return TRUE; }
Devil
[ Dieser Beitrag wurde am 30.01.2003 um 11:57 Uhr von devil81 editiert. ]
-
Also ich ahbe diese unktion mal in meine Documenten Klasse kopiert. Wo soll ich die nu Aufriúfen, bzw Wie? Und vor allem ist dann der Aufruf richtig?
SwitchToView(RUNTIME_CLASS(CKlasse));