Wie lege ich eine minimale Fenstergröße in wxWidgets fest?

8

Dies ist die Hierarchie der Widgets, die ich habe:

Rahmen & gt; wxBoxSizer & gt; wxPanel & gt; wxBoxSizer & gt; wxFlexGridSizer (2 Spalten, 9 Zeilen), mit verschiedenen Formularfeldern und Schaltflächen.

Mit dem ersten BoxSizer wird das Panel platziert und mit dem zweiten wird ein Rahmen um das FlexGrid gelegt.

Alles sieht gut aus, und der Rahmen kann richtig vergrößert werden, wenn das Fenster vergrößert wird, aber es kann auch fast auf nichts geändert werden, indem alle Formularelemente verborgen werden.

Wie erzwinge ich die Mindestgröße für das Fenster standardmäßig auf die vom FlexGridSizer vorgeschlagene (alle Formularelemente sichtbar und mit ihren minimal möglichen Größen)?

    
MaxVT 04.03.2009, 18:27
quelle

4 Antworten

6

Wenn Sie die SetMinSize () -Methode für Ihren Frame verwenden, um eine Mindestgröße festzulegen, wird ein Grenzwert für den kleinsten Bereich des Frames festgelegt (nur getestet). Einmal eingestellt, lässt wxWidgets es nicht zu, dass der Frame kleiner als der angegebene Wert ist.

Ich würde den Wert so einstellen. Im Konstruktor richten Sie alle Elemente des Rahmens ein. Am Ende, nachdem Sie die Layout() -Methode aufgerufen haben, um alle Sizer und ähnliches einzurichten, rufen Sie die GetSize(int *w, int *h) -Methode auf, um die X- und Y-Größe Ihres Frames im Standardlayout zu erhalten. Verwenden Sie diese Werte, um die SetMinSize() -Methode aufzurufen, um diese Standardgröße als Minimum für Ihren Frame festzulegen. Dies berücksichtigt alle verschiedenen Abstände und Ränder und solche, die durch den Rahmen und die enthaltenen Elemente festgelegt werden.

    
dagorym 05.03.2009, 18:30
quelle
12

Wahrscheinlich viel zu spät, aber die hier gegebenen Antworten sind unnötig kompliziert, Sie müssen einfach SetSizerAndFit(sizer) aufrufen, um sowohl den Sizer dem Rahmen zuzuordnen als auch seine anfängliche Größe und diese Größe als minimal akzeptable Größe festzulegen.

    
VZ. 12.02.2010 22:02
quelle
2

In wxPerl kann dagorym die Antwort prägnant als geschrieben werden $self->SetMinSize($self->GetSize()); nach einem Aufruf von Layout() .

    
MaxVT 10.03.2009 07:29
quelle
1

Ich würde versuchen, wxFrame- & gt; SetMinSize (wxSize) mit was auch immer wxFlexGridSizer- & gt; GetMinSize () zurück, sollte funktionieren, aber nicht getestet. Sie müssen beachten, was GetMinSize über das Konvertieren auf die Fenstergröße sagt, bevor ich es erwarte.

    
SteveL 04.03.2009 20:48
quelle