wxWidgets - Die Position von wxGridSize verändern
-
Ich wollte einen Taschenrechner schreiben, der wie der taschenrechner bei Windows die Zahlen als Buttons hat.
Hierzu habe ich einen wxGridsizer und eine Schleife benutzt, doch die durch wxGridsizer ausgerichteten Buttons werden zwar richtig angezeigt, aber der erste Button befindet sich in der linken oberen Ecke und wird somit von der MenuBar überdeckt.
Außerdem überdecken die Buttons ein wxTextCtrl-Objekt, dass eigentlich über den Buttons sein sollte.
Wie kann man also die Position des ersten objektes von wxGridSizer verändern?mfg D3lta
-
Mach ein padding in die Zellen oder eine Border und versuche auch wxALL und/oder wxEXPAND als Parameter, evlt hilft auch wxShaped.
Allgemein rate ich dir aber dazu, den wxFormbuilder zu verwenden und die UI über das wxResource-System zu laden.
Hat die Vorteile, dass man die UI unabhängig vom Code bauen kann und für kleine Änderungen nicht neu kompilieren muss.edit: Nen fix zusammengeklicktes Design:
/////////////////////////////////////////////////////////////////////////// // C++ code generated with wxFormBuilder (version Nov 17 2010) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// #include "noname.h" /////////////////////////////////////////////////////////////////////////// MyPanel1::MyPanel1( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { wxBoxSizer* bSizer1; bSizer1 = new wxBoxSizer( wxVERTICAL ); wxGridSizer* gSizer1; gSizer1 = new wxGridSizer( 1, 1, 0, 0 ); m_staticText1 = new wxStaticText( this, wxID_ANY, wxT("99999.99999999"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); m_staticText1->Wrap( -1 ); m_staticText1->SetFont( wxFont( 22, 75, 93, 90, false, wxEmptyString ) ); m_staticText1->SetForegroundColour( wxColour( 15, 165, 176 ) ); m_staticText1->SetBackgroundColour( wxColour( 255, 255, 255 ) ); gSizer1->Add( m_staticText1, 0, wxALL|wxEXPAND, 5 ); bSizer1->Add( gSizer1, 1, wxEXPAND, 5 ); wxGridSizer* gSizer3; gSizer3 = new wxGridSizer( 1, 2, 0, 0 ); wxGridSizer* gSizer2; gSizer2 = new wxGridSizer( 5, 2, 0, 0 ); m_button1 = new wxButton( this, wxID_ANY, wxT("1"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button1, 0, wxALL|wxEXPAND, 5 ); m_button2 = new wxButton( this, wxID_ANY, wxT("2"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button2, 0, wxALL|wxEXPAND, 5 ); m_button3 = new wxButton( this, wxID_ANY, wxT("3"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button3, 0, wxALL|wxEXPAND, 5 ); m_button4 = new wxButton( this, wxID_ANY, wxT("4"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button4, 0, wxALL|wxEXPAND, 5 ); m_button5 = new wxButton( this, wxID_ANY, wxT("5"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button5, 0, wxALL|wxEXPAND, 5 ); m_button6 = new wxButton( this, wxID_ANY, wxT("6"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button6, 0, wxALL|wxEXPAND, 5 ); m_button7 = new wxButton( this, wxID_ANY, wxT("7"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button7, 0, wxALL|wxEXPAND, 5 ); m_button8 = new wxButton( this, wxID_ANY, wxT("8"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button8, 0, wxALL|wxEXPAND, 5 ); m_button9 = new wxButton( this, wxID_ANY, wxT("9"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button9, 0, wxALL|wxEXPAND, 5 ); m_button0 = new wxButton( this, wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer2->Add( m_button0, 0, wxALL|wxEXPAND, 5 ); gSizer3->Add( gSizer2, 5, wxEXPAND, 5 ); wxGridSizer* gSizer7; gSizer7 = new wxGridSizer( 1, 1, 0, 0 ); m_button17 = new wxButton( this, wxID_ANY, wxT("+"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer7->Add( m_button17, 0, wxALL|wxEXPAND, 5 ); m_button18 = new wxButton( this, wxID_ANY, wxT("-"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer7->Add( m_button18, 0, wxALL|wxEXPAND, 5 ); m_button19 = new wxButton( this, wxID_ANY, wxT("/"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer7->Add( m_button19, 0, wxALL|wxEXPAND, 5 ); m_button20 = new wxButton( this, wxID_ANY, wxT("*"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer7->Add( m_button20, 0, wxALL|wxEXPAND, 5 ); m_button21 = new wxButton( this, wxID_ANY, wxT("C"), wxDefaultPosition, wxDefaultSize, 0 ); gSizer7->Add( m_button21, 0, wxALL|wxEXPAND, 5 ); gSizer3->Add( gSizer7, 1, wxEXPAND, 5 ); bSizer1->Add( gSizer3, 5, wxEXPAND, 5 ); this->SetSizer( bSizer1 ); this->Layout(); } MyPanel1::~MyPanel1() { }
-
Ich habe bisher auf Tools verzichtet, um bei meinen momentanen noch sehr überschabaren Projekten dazuzulernen, denn ich bin auf dem Gebiet wxWidgets noch ein ziemlicher Anfänger.
Ich werde die Lösung bald ausprobieren
Und wenn man Tools verwendet, sollte man ja auch über das Grundwissen verfügen, das ich versuche zu erlangenmfg D3lta
-
D3lta schrieb:
Ich habe bisher auf Tools verzichtet, um bei meinen momentanen noch sehr überschabaren Projekten dazuzulernen, denn ich bin auf dem Gebiet wxWidgets noch ein ziemlicher Anfänger.
Ich werde die Lösung bald ausprobieren
Und wenn man Tools verwendet, sollte man ja auch über das Grundwissen verfügen, das ich versuche zu erlangenmfg D3lta
Glaub mir, das wxResource-System und wxFormbuilder erleichtern die Arbeit mit wxWidgets ungemein. Vor allem speichert das resourcen-system auch die Icons und man muss sie nicht in der binary speichern unter windows und dann unter linux anders laden.
Nur, wenn man eine halbwegs vernünftige GUI mit den Sizern bauen will, muss man oft viel verschachteln, vor allem bei größeren Dialogen. Da will ich das gar nicht von Hand machen :D.
Hatte hier mal eine (rudimentäre) Anleitung geschrieben:
http://www.c-plusplus.net/forum/p2029308#2029308Live-Beispiel für das laden so einer resourcen-datei:
http://code.google.com/p/nightlight2d/source/browse/trunk/NightShade/Application.cpp#88
http://code.google.com/p/nightlight2d/source/browse/trunk/NightShade/Mainframe.cpp#89