CSplitterWnd Size



  • Hallo Community,

    in meiner SDI habe ich ein Splittergerüst. Es funktioniert, wird also aufgebaut und mit Inhalt gefüllt. Nur: die Größe der Views des SecondSpliiter sind gerade einmal so groß wie die Trennlinie selbst, heißt: nur die View des FirstSplitter wird gezeigt, und zwar so groß wie der Clientbereich, obwohl ich Mindestgrößen angegeben habe. Ich kann die Splitter mit der Maus verschieben, und sehe dann den Inhalt.

    this->FirstSplitter.CreateStatic( this , 2 , 1 );
    this->SecondSplitter.CreateStatic( &this->FirstSplitter , 1 , 2 , WS_CHILD | WS_VISIBLE , this->FirstSplitter.IdFromRowCol( 1 , 0 ) );
    
    this->FirstSplitter.CreateView( 0 , 0 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    
    this->SecondSplitter.CreateView( 0 , 0 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    this->SecondSplitter.CreateView( 0 , 1 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    

    Auch ein nachträgliches Verändern der Größe sowohl im OnCreateClient(), als auch im OnSize() scheitern.

    this->SecondSplitter.SetRowInfo( 0 , 100 , 100 );
    this->SecondSplitter.SetColumnInfo( 0 , 100 , 100 );
    this->SecondSplitter.SetColumnInfo( 1 , 100 , 100 );
    this->SecondSplitter.RecalcLayout();
    

    Wenn ich das ClientRect der Splitter abfrage, werden mir aber die richtigen Größen, welche ich beim Erstellen festgelegt habe, zurückgegeben.

    Weiß jemand einen Rat?

    Vielen Dank im Voraus



  • Das Problem habe ich noch immer nicht lösen können, und nun tritt auch noch das nächste Problem auf.

    Da ich einen Splitter genau in der Mitte meines maximierten Fensters habe will, rufe ich die Funktion "GetClientRect()" im OnCreateClient gleich als erstes auf. Diese gibt mir aber falsche Werte zurück. Die Breite des Bereichs wird mir 400! Pixel zu klein zurückgegeben.
    In einem anderen Projekt funktioniert die Funktion aber einwandfrei.

    Vielen Dank


  • Mod

    Das geht auch nicht.Die Größe eines Fenster kan beim Erzeugen anders sein. Du musst immer wuf WM_SIZE reagieren.



  • Danke schön Martin, die Größe wird im OnSize tatsächlich richtig ausgegeben. Also jetzt zumindest auf einmal 😃

    Aber mein Problem mit den Splittern besteht immernoch. Mein Splittergerüst wurde noch erweitert:

    this->FirstSplitter.CreateStatic( this , 4 , 1 );
    this->SecondSplitter.CreateStatic( &this->FirstSplitter , 1 , 2 , WS_CHILD | WS_VISIBLE , this->FirstSplitter.IdFromRowCol( 1 , 0 ) );
    this->ThirdSplitter.CreateStatic( &this->FirstSplitter , 1 , 3 , WS_CHILD | WS_VISIBLE , this->FirstSplitter.IdFromRowCol( 2 , 0 ) );
    this->FourthSplitter.CreateStatic( &this->FirstSplitter , 1 , 2 , WS_CHILD | WS_VISIBLE , this->FirstSplitter.IdFromRowCol( 3 , 0 ) );
    
    this->FirstSplitter.CreateView( 0 , 0 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    
    this->SecondSplitter.CreateView( 0 , 0 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    this->SecondSplitter.CreateView( 0 , 1 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    
    this->ThirdSplitter.CreateView( 0 , 0 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    this->ThirdSplitter.CreateView( 0 , 1 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    this->ThirdSplitter.CreateView( 0 , 2 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    
    this->FourthSplitter.CreateView( 0 , 0 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    this->FourthSplitter.CreateView( 0 , 1 , RUNTIME_CLASS( CDummyView ) , CSize( 100 , 100 ) , pContext );
    

    Korrekt angezeigt werden jedoch nur die View des des 1. und des 4. Splitter. Nummer 2 und 3 sind so sehr von der Höhe gestaucht, dass nur noch die Splitterbar zum Anfassen übrig bleibt. Inhaltlich trotzdem gefüllt.


  • Mod

    Wie soll das gehen, dass 2 100x100 Felder in ein Grid mit 100x100 reingeht?



  • Ohhhhh damn, Denkfehler von mir 😃
    Ich musste natürlich via "SetRowInfo" den restlichen Zeilen vom 1. Splitter noch eine Höhe zuweisen. Bin fälschlicherweise davon ausgegangen, das die Größenangabe im CreateView ausreicht.
    Danke Martin, durch deinen letzten Beitrag bin ich erst in Grübeln gekommen und habs lösen können 🙂

    👍 Top


Log in to reply