В интерфейсе wxWidgets все элементы собраны в верхнем левом углу при первом открытии - PullRequest
0 голосов
/ 18 сентября 2011

Я новичок в wxWidgets и пытаюсь создать пользовательский интерфейс. Я использую Microsoft Visual Studio 2010.

Я стараюсь избегать использования абсолютных позиций для элементов пользовательского интерфейса, поэтому я стараюсь делать все с помощью sizer. Но когда я избегаю проектирования с абсолютными точками, мой интерфейс выглядит очень плохо, когда я впервые открываю приложение. Но это возвращается к тому, что я желаю, когда я изменяю размер окна, увеличиваю его или просто тяну за угол. Но изначально каждый предмет собирается до левого верхнего угла.

Как мне избежать этой проблемы? Сегмент кода приведен ниже:

SimpleUI::SimpleUI(const wxString& title)
       :wxFrame(NULL, -1, title, wxPoint(-1,-1), wxSize(1280, 720))
{
       wxPanel *panel = new wxPanel (this, -1);

       wxColour col1;
       col1.Set(wxT("WHITE"));
       panel->SetBackgroundColour(col1);

       // PNG Files import to the project
       wxImage::AddHandler ( new wxPNGHandler );
       wxBitmap Rseg;
       Rseg.LoadFile("rSeg.png", wxBITMAP_TYPE_PNG);
       wxBitmap Radjust;
       Radjust.LoadFile("rAdjust.png", wxBITMAP_TYPE_PNG);
       wxBitmap Rsurf;
       Rsurf.LoadFile("rSurf.png", wxBITMAP_TYPE_PNG);
       wxBitmap Gseg;
       Gseg.LoadFile("gSeg.png", wxBITMAP_TYPE_PNG);
       wxBitmap no;
       no.LoadFile("no.png", wxBITMAP_TYPE_PNG);

       // Initialization of the Sizers
       wxBoxSizer *vbox = new wxBoxSizer (wxVERTICAL);
       wxBoxSizer *hbox1 = new wxBoxSizer (wxHORIZONTAL);
       seg = new wxBitmapButton(panel, ID_CLICKEDseg, Rseg);
       seg ->SetBitmapDisabled(Gseg);
       Connect(ID_CLICKEDseg, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SimpleUI::OnClickedSeg));

       adjust = new wxBitmapButton(panel, -1, Radjust);
       surf = new wxBitmapButton(panel, -1, Rsurf);
       nopass = new wxBitmapButton(panel, -1, no, wxPoint(-1, -1), wxDefaultSize, wxBORDER_NONE);

       // Initialization of the Menubar
       menubar = new wxMenuBar;
       file = new wxMenu;
       help = new wxMenu;

       // Menubar build
       menubar->Append(file,wxT("&File"));
       menubar->Append(help,wxT("&Help"));
       SetMenuBar(menubar);

       // Layout and the main assignments

       vbox->Add(-1,30);
       wxBoxSizer *hbox3 = new wxBoxSizer (wxHORIZONTAL);
       hbox3->Add(nopass, 0);
       vbox->Add(hbox3, 0, wxALIGN_LEFT | wxLEFT, 120);

       vbox->Add(-1,50);

       hbox1->Add(seg, 0, wxRIGHT, 120);
       hbox1->Add(adjust, 0);
       vbox->Add(hbox1, 0, wxALIGN_LEFT | wxLEFT, 80);

       vbox->Add(-1,80);
       wxBoxSizer *hbox2 = new wxBoxSizer (wxHORIZONTAL);
       hbox2->Add(surf, 0);
       vbox->Add(hbox2, 0, wxALIGN_LEFT | wxLEFT, 80);


       panel->SetSizer(vbox);
       Center();
}

Спасибо.

1 Ответ

1 голос
/ 18 сентября 2011

Чтобы решить вашу непосредственную проблему, добавьте вызов wxSixer :: Layout () в конце конструктора cSimpleUI

vbox->Layout();
...