wxWidgets - Verhalten von wxSizer bei SetClientSize in Controls?

Beichtpfarrer

Erfahrenes Mitglied
Hallo,

Ich habe vor kurzer Zeit mit wxWidgets zu programmieren angefangen.
Leider ist die Dokumentation nicht in allen Punkten ganz so genau, oder ich finde die entsprechenden Stellen bloß nicht.

Also, falls jemand sich damit auskennt, interessiert mich folgendes:

Ich habe eine Ableitung eines wxFrame-Objekts. Das erstellt wiederum ein wxPanel in dem verschiedene andere Fenster liegen.
Eins dieser Fenster verändert, nachdem ich eine Bitmap lade, seine Größe (mit SetClientSize), um seine Größe an die Bitmap anzupassen.

Derzeit benutze ich noch keine Sizer. Mich interessiert, ob ein Sizer automatisch die Größe des umgebenden Fensters anpassen würde? Oder, ob ich ihm noch irgendwas dazu anweisen muss? Oder wie der Code ungefähr sein muss, damit das mit dem Sizer korrekt funktioniert, falls es funktioniert.


Dann habe ich noch eine zweite Frage, die passt nicht zum Titel, aber ich glaube, es lohnt sich nicht, eine extra Frage aufzumachen, und wer was mit dem ersten Punkt anfangen kann, wird hoffentlich auch zum zweiten was zu sagen haben.

Also, ich habe folgenden Code, um ein Gitter zu zeichnen:

Code:
void vrPanel::PaintGrid(wxDC& dc,wxPoint origin){
	wxSize gridboxsize = GetGridBoxSize();
	wxPoint dest = origin + GetGridSize();
	dc.SetPen(m_gridpen);
	wxPoint ulc = origin + GetGridBoxULC();
	while(ulc.x < dest.x){
		dc.DrawLine(ulc.x, origin.y, ulc.x, dest.y);
		ulc.x += gridboxsize.x; }
	while(ulc.y < dest.y){
		dc.DrawLine(origin.x, ulc.y, dest.x, ulc.y);
		ulc.y += gridboxsize.y; }
}

Auf die Details kommt es gar nicht an. Eigentlich habe ich nur das Problem, dass ich den Pen mit einem Alpha Channel erzeugt habe. z.B.:
Code:
wxPen pen(wxColour(50,50,50,50));

Jedenfalls denke ich 50 im Alpha-Channel der Farbe macht mir ein ziemlich durchsichtigen Pen.
Und leider deckt das Gitter vollkommen ab.

Kann mir da jemand helfen..?
 
Hallo,
du vermutest richtig: Mit wxSizer erhälst du die Möglichkeit, Fenstergrößen zur Laufzeit anzupassen. Die Sizer dienen der Beschreibung des Verhaltens bei Größenänderungen.
Nachdem in deinen Sizer deine Bitmap geladen ist, rufst du für das darstellende Fenster SetSizeHints(this) auf, und danach noch Layout(). Und schwupp, ändert sich das Fenster.

Wenn du wxSizers noch nicht kennst, musst du allerdings nicht unerhebliche Zeit in Einarbeitung investieren. Es gibt aber auch ein tolles Werkzeug, um grafische Benutzeroberflächen mit Sizers komfortabel zu erstellen (siehe z.B. http://www.wxFormBuilder.org)

Grüße OS
 

Neue Beiträge

Zurück