Wechsel von FormView funktioniert nicht ?



  • Hallo erst mal,

    ich nutze eine Funktion zum Wechsel von zwei Formviews in einer SDI Anwendung.
    Über entsprechende Menüfunktionen wird die Funktion mit Parametern aufgerufen.

    Funktioniert alles ganz toll, aber der neue Formview wird nicht angezeigt. Erst wenn das Fenster bewegt wird, wird der richtige View sichtbar.

    Ich weiß nicht was ich in der Funtion noch machen muss, damit das richtig angezeigt wird. Ich bin für jeden Hinweis dankbar.

    ( VS 2010 )

    Mfg Verwegener

    void CMainFrame::SwitchToForm(int nForm)
    {
    	CView* pOldActiveView = GetActiveView();
    
    	CView* pNewActiveView = (CView*)GetDlgItem(nForm);
    	CCreateContext context;
    	context.m_pCurrentDoc = pOldActiveView->GetDocument();
    
    	if (pNewActiveView == NULL)
    	{
    		switch (nForm)
    		{
    
    		case IDD_KANALDATENBANK5_FORM:
    			context.m_pNewViewClass = RUNTIME_CLASS(CKanaldatenbank5View);
    			pNewActiveView = (CKanaldatenbank5View*) CreateView ( &context, AFX_IDW_PANE_FIRST);
    			break;
    
    		case IDD_SMDFORM:
    			context.m_pNewViewClass = RUNTIME_CLASS(CSmdForm);
    			pNewActiveView = (CSmdForm*) CreateView ( &context, AFX_IDW_PANE_FIRST);
    			break;
    
    		}
    		pNewActiveView->OnInitialUpdate();
    	}
    
    	pNewActiveView->ShowWindow(TRUE);
    
    	SetActiveView(pNewActiveView);
    	RecalcLayout();
    
    	pNewActiveView->Invalidate();
    
    	pNewActiveView->UpdateWindow();
    
    	delete pOldActiveView;
    
    }
    

  • Mod

    Ist komplett beschrieben in der MSDN.
    Eine Suche in Google nach "switch view" liefert sofort als Top-Link:
    http://msdn.microsoft.com/en-us/library/s199bks0(VS.80).aspx

    Deine Fehler, soweit ich es überflogen habe:
    1. Du versteckst nicht den alten View.
    2. Du hast zwei Viewsmit der Selben primären ID.



  • Hallo Martin ,

    zunächst mal vielen Dank für deine Antwort.
    Ich hatte nicht nach switch view gegoogelt, und auch nachdem ich das jetzt mal gemacht habe, fand ich trotzdem nicht den MSDN Artikel.

    Vielleicht hab ich einen anderen Google ?

    Meine Absicht ist zwischen mehreren Fornviews zu wechseln, wobei ich möchte, das die Views erst angelegt werden, wenn diese angezeigt werden und danach wieder gelöscht werden.

    Im MSDN Beispiel werden die Views beim Programmstart angelegt und dann sichtbar. bzw. unsichtbar gemacht.

    Das Verstecken des alten Views hat nicht zum Ziel geführt.

    Die Views haben unterschiedliche ID’s.

    Ergo bin ich noch nicht weiter.


  • Mod

    Dann solltest Du auch den alten View zerstören und nicht nur neue immer anlegen.
    Wenn die Views wriklich zerstört werden kannst Du mit einer ID arbeiten.

    Dein Code entsprichtin jedem Fall nicht dem was Du schreibst.
    Zeig den Code mit dem Du jetzt arbeitest.

    Warum willst Du die Ansichten zerstören und neu aufbauen?
    Du weißt dass Du dann auch alle daten verlierst bzw. diese zuvor im Dokument sichern musst...

    PS: Ich habe mich vertan. Die Suche lautete auch nicht "switch view" sondrn "mfc switch view"... :xmas1: Eigentlich logisch oder...



  • Moin,

    noch mal danke für die Unterstützung.

    Ich hab das jetzt mit dem MSDN Artikel lösen können.

    Mein Fehler war das ich immer nach Beispielen zum Suchwort View gegoogelt habe.


Anmelden zum Antworten