CSplitterWnd View zeigt 2 leere Frames



  • Hallo,

    ich habe im OnCreateClient des MainFrames meiner SDI, die Funktion CreateStatic eines CSplitterWnd Object aufgerufen.
    Der Splitter wird erstellt. Auch der Konstruktor der Runtime Klasse für beide Frames (von CListView abgeleitet) wird ausgeführt, aber die beiden Splitterframes bleiben weiß, also leer.
    Lasse ich den Splitter weg und lade die ListView direkt ins MainFrame, wird sie angezeigt.

    Woran kann das denn liegen? Ich habe unzählige Tuts & Beispiele durchgeschaut, aber keine Lösung gefunden.

    Danke im Voraus


  • Mod

    Zeig mal Code, wie Du die View anlegst.



  • Ich sollte auch erwähnen, dass es in meiner SDI keine Document Klasse gibt. Deshalb wird die ListView (nur wenn der Splitter aktiv ist) auch nicht im OnInitialUpdate() erstellt und gefüllt, sondern im OnCreate(). Probiert habe ich aber beides - erfolglos.

    Hier der Code vom OnCreateClient:

    BOOL xMainFrame::OnCreateClient( LPCREATESTRUCT lpcs , CCreateContext *pContext ) {
    
    	if( !m_splitterWnd.CreateStatic( this , 1 , 2 ) ) {	return FALSE;	}
    
    	CRect clientRect;
    	GetClientRect( &clientRect );
    
    	if( !m_splitterWnd.CreateView( 0 , 0 , RUNTIME_CLASS( xChildView ) , CSize( clientRect.Width() / 2 , clientRect.Height() ) , pContext ) ) {
    		MessageBox( "Fehler beim CreateView Pane 0,0" );
    		return FALSE;
    	}
    	if( !m_splitterWnd.CreateView( 0 , 1 , RUNTIME_CLASS( xChildView ) , CSize( clientRect.Width() / 2 , clientRect.Height() ) , pContext ) ) {
    		MessageBox( "Fehler beim CreateView Pane 0,1" );
    		return FALSE;
    	}
    
    	m_splitterWnd.SetRowInfo( 0 , clientRect.Height() , 0 );
    	m_splitterWnd.SetColumnInfo( 0 , clientRect.Width() / 2 , clientRect.Height() );
    	m_splitterWnd.SetColumnInfo( 1 , clientRect.Width() / 2 , clientRect.Height() );
    	m_splitterWnd.RecalcLayout();
    
    	//return (CFrameWnd::OnCreateClient( lpcs , pContext ));
    
    	return TRUE;
    }
    

    xChildView ist dabei die von CListView abgeleitete Klasse.
    Auch wenn ich 2 verschiedene Klassen erstelle (z.b. von eine CListView und eine von CTreeView abgeleitet) klappt nichts.

    Ich habe dem Konstruktor von xChildView eine MessageBox verpasst, un diese meldet sich auch 1x. Also wird sie ja erstellt!?


  • Mod

    Sieht eigentlich alles richtig aus.



  • Schade 🙂 Wenn wenigstens irgendwas falsch dran wäre, sodass man nochmal Hoffnung schöpfen könnte...

    Was wären denn so generell Fehler die beim Split passieren können? Dann würde ich meinen gesamten Source-Code nochmal durchsuchen und auf Fehlersuche gehen.

    Danke schön


  • Mod

    Schau mal in den Spy++. Kommen die Größenänderungen an?
    D.h. erfolgt der Resize entsprechend auch in den Childs.
    Ist das Parent-Splitter Visible?



  • Hallo,

    danke für die Mühe, aber ich bin nach langem Suchen hier im Forum zufällig darauf gestoßen.
    Es lag an einem vergessenen DECLARE_DYNCREATE() & IMPLEMENT_DYNCREATE().

    Jetzt funktioniert es 🙂

    Danke schön trotzdem


Anmelden zum Antworten