SDI mit wechselnden Views und Splitter
-
Hallo zusammen!
Ich habe ein kleines Problem, jedoch spezifisch dazu nichts in diesem Forum gefunden. Also, ich habe eine Anwendung mit einem MainFrame und drei Views (CRecordView). In dem MainFrame ist ein SplitterWnd wo Pane(0, 0) eine Outlookbar ist und Pane(0, 1) mein View, welches ich wechseln möchte. Das mit dem View wechseln funktioniert mit dieser Funktion:
BOOL CMainFrame::SwitchToView(CRuntimeClass* pNewViewClass) { CFrameWnd* pMainWnd = (CFrameWnd*)AfxGetMainWnd(); CView* pOldActiveView = (CView *)wndSplitter.GetPane(0,1); // 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(); int row, col; ASSERT(pSplitter->IsChildPane(pOldActiveView, row, col)); CRect viewrect; pOldActiveView->GetWindowRect(&viewrect); pOldActiveView->DestroyWindow(); CCreateContext context; context.m_pNewViewClass = pNewViewClass; context.m_pCurrentDoc = GetActiveDocument(); 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; }
Nur, wenn ich jetzt zu meinem 2. View wechsle und dann wieder zurück, ist mein Viewfenster komplett leer, d.h. Leere CListCtrl, leere Felder, wobei doch eigentlich eine Dialog Abgleichung durch RFX mit einer CRecordset Klasse eingebunden wurde. Irgendwas stimmt doch da nicht. Ich habe lange nach einer Lösung für mein Problem gesucht, doch vergebens....
Bitte helft mir, ich möchte, dass mein Fenster (View) auch NACH einem View-wechsel wieder Informationen enthält.
Ich dachte zuerst, sowas ginge, indem man nach dem Viewwechsel einfach OnInitialUpdate() vom betroffenen View aufruft, aber das klappt nicht, da diese Funktion nur vom AFX aufgerufen werden kann und das auch nur einmal.
Danke im Voraus
-
Wie sieht dein View aus?
Devil
-
Eine von CRecordView abgeleitete Klasse. Meinst du, das ist wichtig?
-
Hast du OnActivateView überladen ?
-
Nein, hab ich noch nicht.
Meinst du, das würde helfen?
-
Danke für eure Hilfe,
ich habe genau das, was ich gesucht habe hier gefunden:
http://www.codeguru.com/Cpp/W-D/splitter/article.php/c1529/
Hier werden die Views nicht zerstört und es können für ein Splitter-Pane beliebig viele Views verwendet werden! Lest es euch mal durch.