SDI - Zwischen Views wechseln



  • Hallo ich arbeite an einem SDI Projekt mit VisualStudio 6. Ich möchte dabei zwischen verschiedenen Views wechseln: CMyMultiviewView und CNextView, wobei CMyMultiviewView das Standartview ist. CNextView ist eine eigene Klasse, abgeleitet von CView.

    Zum wechseln habe ich folgende Funktion geschrieben:

    void CMainFrame::SwitchView(void)
    {
    	CView *pOldView;
    	CView *pNewView;
    	//pOldView->MessageBox("In Switch View");
    
    	//Zeiger Auf aktives View holen
    	pOldView=GetActiveView();
    	//Zeiger auf das aktive View retten
    	m_pCFirstView=pOldView;
    
    	//Zweites View erstellen
    	CRuntimeClass *pCR=RUNTIME_CLASS(CNextView);
    	m_pCSecondView = static_cast<CView*>(pCR->CreateObject());
    	//ID des Views ungleich AFX_IDW_PANE_FIRST setzen
    	m_pCSecondView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW
                                 ,rectDefault,this,AFX_IDW_PANE_FIRST+1,NULL);
    
    	pNewView = m_pCFirstView;
    
    	//IDs austauschen
    	int nChildID=pNewView->GetDlgCtrlID();
    	pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    	pOldView->SetDlgCtrlID(nChildID);
    
    	//Zeiger auf das Dokument holen
    	CDocument *pDoc= pOldView->GetDocument();
    
    	//View mit Dokument verbinden
    	pDoc->AddView(pNewView);
    	pDoc->RemoveView(pOldView);
    
    	//Aktives View dem Rahmenfenster mitteilen
    	SetActiveView(pNewView);
    	//Und Viewgröße neu berechnen
    
    	RecalcLayout();
    	//View anzeigen bzw. verbergen
    	pNewView->ShowWindow(SW_SHOW);
    	pOldView->ShowWindow(SW_HIDE);
    
    }
    

    Allerding bekomme ich immer einen Laufzeitfehler. Der Fehler tritt beim Verbinden der Views mit dem Dokument auf. 😞

    Was mache ich falsch ? 😕 Bitte um Hilfe!

    gruß DR



  • Hallo!

    Ist da evtl ein Zeiger NULL?
    Aber, zu genau dem Problem hab ich was in der FAQ. Schau doch mal, ob dir das hilft. http://www.c-plusplus.net/forum/viewtopic-var-t-is-81908.html
    🙂



  • Vielen Dank für deine Antort, ich muss allerdings gestehen, der Fehler lag an meinem Code: in Zeile 19 muss es heißen

    pNewView=m_pCSecondView
    

    ...

    Nun hat sich aber ein neuer Fehler aufgetan:
    Ich habe eine Klasse (CMyFormView, die von CFormView erbt) dem Projekt hinzugefügt. Wenn ich jetzt versuche

    m_pCFormView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,this,AFX_IDW_PANE_FIRST+1,NULL);
    

    auszuführen erscheint folgender Compilerfehler:
    error C2248: 'CFormView::Create': Kein Zugriff auf protected Element, dessen Deklaration in der Klasse "CFormView" erfolgte.
    Ich habe schon alle Funktionen in meiner Klasse auf public gesetzt, der Fehler erscheint weiterhin. Und wenn ich die Funktion in der Klasse CFormView in afxext.h auf public setzte bekomme ich Linkerfehler (7stück...). Was kann ich tun??
    gruß DR



  • Puh, also ich bin nicht ganz der Experte bei sowas, aber mein Versuch wäre, die Create zu überschreiben und dann da drin einfach die Basisklasse aufzurufen. 🙂

    Und: In der MFC darfst du nicht rumändern! 😮


Anmelden zum Antworten