Probleme mit wxSizer
-
Hallo Forum
Habe auf einem Frame ein Panel in einem Sizer. Das soll sich beim Grösse verändern des Fensters nicht verändern, aber auf Userwunsch (mit SetSize).
Das Problemist, das sich das restliche Layout nicht anpasst, dh entweder ist es zu gross oder zu klein.Hier ein Minitest:
helloFrame::helloFrame(wxFrame *frame, const wxString& title) : wxFrame(frame, -1, title) { m_field = new FieldPanel( 10, this ); m_stats = new wxTextCtrl( this, -1, _( "" ), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_BESTWRAP ); wxBoxSizer* top_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* upper_sizer = new wxBoxSizer( wxHORIZONTAL ); upper_sizer->Add( m_field, wxSizerFlags(0).Border( wxALL, 5 ) ); wxStaticBoxSizer* control_sizer = new wxStaticBoxSizer( wxVERTICAL, this, _("Control") ); control_sizer->Add( new wxButton( this, 0, _("OK") ), wxSizerFlags(0).Left().Border( wxALL, 5 ) ); control_sizer->Add( new wxButton( this, 0, _("Cancel") ), wxSizerFlags(0).Left().Border( wxALL, 5 ) ); upper_sizer->Add( control_sizer, wxSizerFlags(1).Center().Expand().Border( wxALL, 5 ) ); wxBoxSizer* lower_sizer = new wxBoxSizer( wxHORIZONTAL ); lower_sizer->Add( m_stats, wxSizerFlags(1).Expand().Border( wxALL, 5 ) ); top_sizer->Add( upper_sizer, wxSizerFlags(0).Left().Expand().Border( wxALL, 5 ) ); top_sizer->Add( lower_sizer, wxSizerFlags(1).Left().Expand().Border( wxALL, 5 ) ); SetSizer( top_sizer ); Fit(); // Bis hier alles gut // Grösse ändern m_field->set_field_size( 20 ); // Ab hier haperts Fit(); // Hab auch schon // top_sizer->SetSizeHints( this ); // und // Layout(); // probiert } /**********************************************************************/ void FieldPanel::set_field_size( int size ) { m_fields_size = size; m_size = m_fields_count * m_fields_size + 2 * m_fields_space; SetSize( m_size, m_size ); }
Was muss ich tun, damit das Layout neu berechnet wird?
-
Du musst beim Frame danach nochmals Fit/Layout aufrufen.
-
Das funktioniert nicht, die Grösse ändert sich nicht.
-
Ich weiss geht nicht ist keine Fehlerbeschreibung.
Aber ich hab so ziemlich alles probiert, was ich in den Docs und anderen Tutorials gefunden hab. Das Panel behält seine ursprüngliche Grösse bei.
-
Evtl. hilft auch ein Refresh nach dem SetSize.
Es kann aber auch sein, das du an das Fenster selber einen wxSizeEvent schicken musst.
-
Also ein Refresh nützt nichts.
WIe geht das denn mit dem Event senden?