Ab 2. Aufruf von View Probleme
-
Hallo Leute,
Views rauben mir noch den letzten Nerv ...
Ich habe in meinem Programm 10 Verschiedene Views. 1 FormView (SDI Anwendung mit CFormView als Basisklasse) 9 TreeViews.
Ich lege die 9 Views in der Funktion OnCreateClient anCMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen CTreeView* ptreeView; ptreeView = (CTreeView*)GetDlgItem(IPANDHOSTTREEVIEW); ptreeView = (CTreeView*)new CIPAndHost; ptreeView->Create(NULL, NULL, WS_BORDER, rectDefault, this, IPANDHOSTTREEVIEW, pContext); }
Ich ruf die Views alle folgendermaßen auf:
CClientWithAnwendung* pClientWithAnwendung; pClientWithAnwendung = (CClientWithAnwendung*)GetDlgItem(CLIENTSWITHANWTREEVIEW); pAktView = GetActiveView(); pDoc = pAktView->GetDocument(); pos = pDoc->GetFirstViewPosition(); while (pos != NULL) { pTreeView = pDoc->GetNextView(pos); if (pTreeView->IsKindOf(RUNTIME_CLASS(CClientWithAnwendung))) { SetActiveView(pTreeView); pTreeView->ShowWindow(SW_SHOWNORMAL); pTreeView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); pAktView->ShowWindow(SW_HIDE); pAktView->SetDlgCtrlID(CLIENTSWITHANWTREEVIEW); } } RecalcLayout(); pClientWithAnwendung->OnDraw(pDC);
Mein Problem ist, das ab dem 2. Aufruf in der Variable pClientWithAnwendung der Wert des Standardviews (CFormView) drinsteht. Ich habe im Debugger geguckt, der geht ganz normal rein, führt alles aus, nur der schreibt den falschen Wert in die Variable
Kann mir vielleicht einer einen Tip geben, woran das liegen könnte, ich wäre seeehr dankbar.
CIAO
Psyco
-
Schau Dir mal den Code zum Wechsel aus der MSDN genauer an, möglicherweise siehst Du den Unterschied. Falls Du ihn nicht finden solltest, bitteschön:
CView* CMyWinApp::SwitchView( ) { CView* pActiveView = ((CFrameWnd*) m_pMainWnd)->GetActiveView(); CView* pNewView = (pActiveView == m_pOldView) ? m_pNewView : m_pOldView; // Exchange view window IDs so RecalcLayout() works. UINT temp = ::GetWindowLong( pActiveView->m_hWnd, GWL_ID); ::SetWindowLong( pActiveView->m_hWnd, GWL_ID, ::GetWindowLong(pNewView->m_hWnd, GWL_ID)); ::SetWindowLong( pNewView->m_hWnd, GWL_ID, temp); pActiveView->ShowWindow(SW_HIDE); pNewView->ShowWindow(SW_SHOW); ((CFrameWnd*)m_pMainWnd)->SetActiveView(pNewView); ((CFrameWnd*)m_pMainWnd)->RecalcLayout(); pNewView->Invalidate(); return pActiveView; }