[wxWidgets] Resizable Image in einem Fenster


  • Mod

    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 ^^


  • Mod

    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...


  • Mod

    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.


  • Mod

    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.


Anmelden zum Antworten