Page 1 of 1

wxSplitterWindow

Posted: Thu Oct 18, 2012 4:10 am
by Toshkarik
Здравствуйте. Подскажите, пожалуйста. Есть сплиттер, который делит основной фрейм на две части. Но делит почему то не на равные части, хотя при вызове SplitHorizontally sashPosition не указываю, и оно равно 0 по умолчанию. Размер основного фрейма равен 800,600. Размер верхней части очень маленький, могу по логике предположить, что он равен 10, та как размер сплиттера по умолчанию равен ( 20, 20 ). Но почему, если добавить еще один сплиттер в существующий ( не важно, в верхнюю часть или нижнюю ), то окна делятся нормально, на две равные части. Минимальный пример:

Code: Select all

MainFrame::MainFrame()
   : wxFrame( 0, wxID_ANY, "Test app", wxDefaultPosition, wxSize( 800, 600 ))
{
   wxBoxSizer *mainSizer = new wxBoxSizer( wxVERTICAL );
   wxSplitterWindow *mainSplitter = new wxSplitterWindow( this ),
                    *upperSplitter = new wxSplitterWindow( mainSplitter ),
                    *lowerSplitter = new wxSplitterWindow( mainSplitter );
   
   wxPanel *testpanel1 = new wxPanel( upperSplitter ),
           *testpanel2 = new wxPanel( upperSplitter ),
           *testpanel3 = new wxPanel( lowerSplitter ),
           *testpanel4 = new wxPanel( lowerSplitter );
      
   testpanel1->SetBackgroundColour( *wxRED );
   testpanel2->SetBackgroundColour( *wxGREEN );
   testpanel3->SetBackgroundColour( *wxBLUE );
   
   mainSplitter->SplitHorizontally( upperSplitter, lowerSplitter );
   upperSplitter->SplitVertically( testpanel1, testpanel2 );
   lowerSplitter->SplitVertically( testpanel3, testpanel4 );

   mainSizer->Add( mainSplitter, 1, wxEXPAND );
   
   SetSizer( mainSizer );
}
Screenshot.
Screenshot.
Возможно ли как то по нормальному сделать, что бы основной фрейм делился на две одинаковые части при запуске? Заранее спасибо.

Re: wxSplitterWindow

Posted: Thu Oct 18, 2012 10:05 am
by Toshkarik
Решил проблему. Может кому поможет. Похоже что все таки нужно инициализировать размер сплиттера действительным размер отличным от wxDefaultSize. Сделал так:

Code: Select all

MainFrame::MainFrame()
   : wxFrame( 0, wxID_ANY, "Test app", wxDefaultPosition, wxSize( 800, 600 ))
{
   wxBoxSizer *mainSizer = new wxBoxSizer( wxVERTICAL );
   wxSplitterWindow *mainSplitter = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, GetClientSize()),
                    *upperSplitter = new wxSplitterWindow( mainSplitter ),
                    *lowerSplitter = new wxSplitterWindow( mainSplitter );
   
   wxPanel *testpanel1 = new wxPanel( upperSplitter ),
           *testpanel2 = new wxPanel( upperSplitter ),
           *testpanel3 = new wxPanel( lowerSplitter ),
           *testpanel4 = new wxPanel( lowerSplitter );
      
   testpanel1->SetBackgroundColour( *wxRED );
   testpanel2->SetBackgroundColour( *wxGREEN );
   testpanel3->SetBackgroundColour( *wxBLUE );
   
   mainSplitter->SplitHorizontally( upperSplitter, lowerSplitter );
   upperSplitter->SplitVertically( testpanel1, testpanel2 );
   lowerSplitter->SplitVertically( testpanel3, testpanel4 );

   mainSizer->Add( mainSplitter, 1, wxEXPAND );
   
   SetSizer( mainSizer );
}