[wxWidgets] Resizable Image in einem Fenster
-
Klappt irgendwie nicht... Entweder bin ich zu doof zu...
Das hatte ich ja vor der Frage schon ausprobiert. Ich hab 3 Stunden Googl hinter mir ^^
Frame
-Panel
--V-Sizer
---H-Sizer
----?
-----wxStaticBitmap
---H-Sizer
----wxListCtrl
---H-Sizer
----wxGridSizer
-----Buttons 2 Rows, 5 Cols
---H-Sizer
----Exit-ButtonGrundsätzlicher Aufbau. In die oberste Zeile soll somit ein Bild. Das Firmenlogo... Die Größe ändert sich aber nicht.
Hatte u.A.:
---H-Sizer
----wxStatic etc blabla---H-Sizer
----V-Sizer
-----wxStaticetc---H-Sizer
----H-Sizer
-----wxStaticetc
-
Das kann mehrere Gründe habe, am Besten zeigst du mal den Code
Evtl hast du beim Hinzufügen zum Sizer ein 'wxEXPAND' vergessen, oder gar 'SetSizer()' vergessen oder 'AddGrowableCol()' vergessen.
Gibt da sehr viele Fehlerquellen^^
-
Mein Vorredner hat da wohl recht.
Viele Wege führen nach Rom
Evtl. klickst du dir mal ein entsprechendes Fenster in einem GUI Editor zusammen, und probierst mit den Sizerflags etwas rum.
Oder du verwendest für "sizable" Controls grundsätzlich einen wxFlex(Grid)Sizer, der ist für sowas ausgelegt.phlox
-
Oder ich verwende DialogBlocks und habe sowohl wxExpand, als auch einen Stretch Factor gesetzt. *g*
So schnell wieder zusammengeklickt. *durchscroll* Hier sind wir gerade zuhause:
//Hauptfenster SMSMainframe* itemFrame1 = this; //Panel anlegen wxPanel* itemPanel2 = new wxPanel( itemFrame1, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL ); //Äußerer Sizer wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL); itemPanel2->SetSizer(itemBoxSizer3); //Erste "Zeile" siz_ImageH = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer3->Add(siz_ImageH, 3, wxGROW|wxALL, 0); //In der "Zeile" ein vertikaler Sizer siz_ImageV = new wxBoxSizer(wxVERTICAL); siz_ImageH->Add(siz_ImageV, 1, wxGROW|wxALL, 5); //Das Bild sbmp_Logo = new wxStaticBitmap( itemPanel2, wxID_STATIC, itemFrame1->GetBitmapResource(wxT("Logo.bmp")), wxDefaultPosition, wxSize(687, 236), 0 ); siz_ImageV->Add(sbmp_Logo, 1, wxGROW|wxALL, 5); //Naja die restlichen "Zeilen".... wxBoxSizer* itemBoxSizer7 = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer3->Add(itemBoxSizer7, 2, wxGROW|wxALL, 0); lst_Results = new Lst_Results( itemPanel2, ID_LIST_RESULTS, wxDefaultPosition, wxSize(100, 100), wxLC_REPORT|wxLC_HRULES|wxFULL_REPAINT_ON_RESIZE ); itemBoxSizer7->Add(lst_Results, 1, wxGROW|wxALL, 5); siz_Label = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer3->Add(siz_Label, 1, wxGROW|wxALL, 0); gsiz_LineButtons = new wxGridSizer(2, 5, 0, 0); siz_Label->Add(gsiz_LineButtons, 1, wxGROW|wxALL, 0); //Buttons anlegen /* ... ... */ siz_Bottom = new wxBoxSizer(wxHORIZONTAL); itemBoxSizer3->Add(siz_Bottom, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 10); b_Exit = new wxButton( itemPanel2, ID_BUTTON_EXIT, _("&Exit"), wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS ); siz_Bottom->Add(b_Exit, 1, wxALIGN_BOTTOM|wxALL, 5); wxStatusBar* itemStatusBar23 = new wxStatusBar( itemFrame1, ID_STATUSBAR1, wxST_SIZEGRIP|wxNO_BORDER ); itemStatusBar23->SetFieldsCount(2); itemFrame1->SetStatusBar(itemStatusBar23);
-
Sind nur wxBoxSizer, und die wachsen wenn überhaupt(sind eigentlich nicht dafür gedacht), nur in eine Richtung.
-> wxFlexGridSizer.
-
Hm stehen aber in jedem Tutorial als "für alles gut". Also der FlexGridSizer funktioniert auch nicht. Gleicher Effekt. Das Bild bleint zwar zentriert, ändert aber die Größe nicht...
Hrng...
-
Shogun schrieb:
Hm stehen aber in jedem Tutorial als "für alles gut". Also der FlexGridSizer funktioniert auch nicht. Gleicher Effekt. Das Bild bleint zwar zentriert, ändert aber die Größe nicht...
Welchem Tutorial?
Bei Flexgridsizer musst du noch verschiedene Funktionen aufrufen, AddGrowableRow und AddGrowableCol u.a.
Im 2. Artikel im Magazin kannst du dir das näher ansehen.phlox
-
aaa* itemFrame1 = this; wxPanel* itemPanel2 = new wxPanel( itemFrame1, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL ); wxFlexGridSizer* itemFlexGridSizer3 = new wxFlexGridSizer(1, 1, 0, 0); itemFlexGridSizer3->AddGrowableRow(1); itemFlexGridSizer3->AddGrowableCol(1); itemPanel2->SetSizer(itemFlexGridSizer3); wxStaticBitmap* itemStaticBitmap4 = new wxStaticBitmap( itemPanel2, wxID_STATIC, itemFrame1->GetBitmapResource(wxT("Logo.bmp")), wxDefaultPosition, wxSize(687, 236), wxFULL_REPAINT_ON_RESIZE ); itemFlexGridSizer3->Add(itemStaticBitmap4, 1, wxGROW|wxGROW|wxALL, 5);
C'est la...
Ich sag doch DialogBlocks
Da sind das 3 Klicks.
Ich sach doch ich hab das in meinem Post probiert ^^
-
einmal zuviel wxGROW
-
Editor erzeugt. Ich hab da nichts reingepfuscht. Der lässt mich das auch nicht rauslöschen. Generiert er dann neu.
-
Nach kurzem rumspielen: Der Schalter ist für V und H
Wenn ich es ändere sieht es beispielsweise so aus: wxGROW|wxALIGN_CENTER_VERTICAL|wxALL
Horizontal wachsen, vertikal zentrieren und Align-Switc hes sind alle gesetzt.Das Bild ändert er aber auch so nicht. Immer die feste Größe X*Y
-
Wenn mich nicht alle Sinne täuschen fängt die Funktion AddGrowableRow() bei 0 an.
Du müsstest also AddGrowableRow(0) und nicht AddGrowableRow(1) schreiben
-
Hrrrng *rumms* Momentchen... testen...
Tante EDIT: No sorry... Zentriert jetzt wieder, aber verändert die Größe nicht. *verzweiflung* Das kann doch nicht sein oder???
aaa* itemFrame1 = this; wxPanel* itemPanel2 = new wxPanel( itemFrame1, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL ); wxFlexGridSizer* itemFlexGridSizer3 = new wxFlexGridSizer(1, 1, 0, 0); itemFlexGridSizer3->AddGrowableRow(0); itemFlexGridSizer3->AddGrowableCol(0); itemPanel2->SetSizer(itemFlexGridSizer3); wxStaticBitmap* itemStaticBitmap4 = new wxStaticBitmap( itemPanel2, wxID_STATIC, itemFrame1->GetBitmapResource(wxT("Logo.bmp")), wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE ); itemFlexGridSizer3->Add(itemStaticBitmap4, 1, wxGROW|wxGROW|wxALL, 0);
Ohhhh man.... In der VCL wär das ein Happen gewesen...
-
Der FlexGridSizer kann nur wachsen wenn er es auch darf -> Alle übergeordneten Sizer durchchecken.
Ich verwende FlexGridSizer immer als Toplevel Sizer, die V und H Sizer nur für Buttons und zeugs was ja nicht wachsen soll.
-
In dem obigen Beispiel sind das die einzigen Elemente. Das ist eine Testanwendung.
Frame, Panel, Gridsizer, StaticBMP.
So ist das aufgebaut. Fertig. Das macht mich aj so schiggerisch.
-
Mach mal SetSizer als letztes, kann sein das er den Kopiert.
Ansonsten müsste es eigentlich passen.
-
phlox81 schrieb:
Mach mal SetSizer als letztes, kann sein das er den Kopiert.
Ansonsten müsste es eigentlich passen.Optional könnte man es dann auch mit sizer->Layout() am Ende probieren, dass sollte dann auf's selbe hinauskommen
Meines wissen behält der Sizer ja die Dimensionen bei, die er beim hinzufügen hatte. Da dort aber noch keine Objekte drinne waren, braucht er seine Meinung nach auch nichts an der Größe zu ändern. Durch Layout() passt er die größe dann wieder an
-
Doppelnope.... Beides nüschts.