[wxBoxSizer]CustomControl zur Laufzeit hinzufügen
-
In meinem Frame habe ich ein Notebook, als Page nutze ich ein ScrolledWindow, dem ich einen wxBoxSizer(wxVERTICAL) hinzugefügt habe.
Mitvoid NotebookTestFrame::OnButton2Click(wxCommandEvent& event) { uwPanel = new Underworld(ScrolledWindow1,-1,wxDefaultPosition,wxDefaultSize); BoxSizer1->Add(uwPanel, 0, wxALL | wxSHAPED | wxALIGN_CENTER_HORIZONTAL, 2); BoxSizer1->Layout(); //BoxSizer1->Add(new Underworld(ScrolledWindow1,-1,wxDefaultPosition,wxDefaultSize), 0, wxALL | wxSHAPED | wxALIGN_CENTER_HORIZONTAL, 2); }
möchte ich zur _Laufzeit_ mein selbst erstelltes Panel(von wxPanel abgeleitet) hinzufügen. Das klappt auch insofern, das es mir angezeigt wird, allerdings nicht unterhalb schon vorhandener Panels. Dafür sollte doch eigentlich der Sizer zuständig sein, so wie ich es verstanden habe. Lasse ich im obigen Code "BoxSizer1->Layout()" weg, erscheint mein Panel im ScrolledWindow an Position 0,0.
Schreibe ich die ersten zwei Zeilen direkt in den ctor(auch mehrfach) erhalte ich das gewünschte Ergebnis!
Wie kann ich also zur Laufzeit meine Panele hinzufügen.
Danke im voraus
michme
-
BoxSizer1 ist eine membervar?
Versuch mal den Sizer mit GetSizer zu bekommen, und für dann damit Add aus:
GetSizer()->Add(...)Und danach evtl. Fit oder Layout aufrufen.
-
1.) Ja, ist eine MemberVar
2.) Hat ich schon versucht. Da verabschiedet sich das Programm mit einem Absturz und XP möchte nach Hause telefonieren(Bericht senden).
Hab's dann mit dem Debugger laufen lassen, der sagt mir wenigstens das es ein Segmentation Vault ist. Vor diesem SegVault konnte ich noch kurz das Panel sehen, wieder an Pos 0,0.michme
-
Hm, zeig mal den Construktor.
-
Hier der ctor:
NotebookTestFrame::NotebookTestFrame(wxWindow* parent,wxWindowID id) { //(*Initialize(NotebookTestFrame) wxMenuItem* MenuItem2; wxMenuItem* MenuItem1; wxMenu* Menu1; wxMenuBar* MenuBar1; wxMenu* Menu2; Create(parent, id, _("Notebook Test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("id")); SetClientSize(wxSize(448,329)); Notebook1 = new wxAuiNotebook(this, ID_NOTEBOOK1, wxPoint(4,4), wxSize(440,252), wxAUI_NB_CLOSE_ON_ALL_TABS); //, _T("ID_NOTEBOOK1")); ScrolledWindow1 = new wxScrolledWindow(Notebook1, ID_SCROLLEDWINDOW1, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL, _T("ID_SCROLLEDWINDOW1")); ScrolledWindow1->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT)); ScrolledWindow1->SetScrollRate(1,1); BoxSizer1 = new wxBoxSizer(wxVERTICAL); uwPanel = new Underworld(ScrolledWindow1,-1,wxDefaultPosition,wxDefaultSize); BoxSizer1->Add(uwPanel, 0, wxALL | wxSHAPED | wxALIGN_CENTER_HORIZONTAL, 2); uwPanel = new Underworld(ScrolledWindow1,-1,wxDefaultPosition,wxDefaultSize); BoxSizer1->Add(uwPanel, 0, wxALL | wxSHAPED |wxALIGN_TOP | wxALIGN_CENTER_HORIZONTAL, 2); uwPanel = new Underworld(ScrolledWindow1,-1,wxDefaultPosition,wxDefaultSize); BoxSizer1->Add(uwPanel, 0, wxALL | wxSHAPED | wxALIGN_CENTER_HORIZONTAL, 2); ScrolledWindow1->SetSizer(BoxSizer1); BoxSizer1->Fit(ScrolledWindow1); BoxSizer1->SetSizeHints(ScrolledWindow1); Notebook1->AddPage(ScrolledWindow1, _("Sacred Underworld"), false); Button1 = new wxButton(this, ID_BUTTON1, _("Beenden"), wxPoint(368,260), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1")); Button2 = new wxButton(this, ID_BUTTON2, _("Add"), wxPoint(4,260), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2")); MenuBar1 = new wxMenuBar(); Menu1 = new wxMenu(); MenuItem1 = new wxMenuItem(Menu1, idMenuQuit, _("Quit\tAlt-F4"), _("Quit the application"), wxITEM_NORMAL); Menu1->Append(MenuItem1); MenuBar1->Append(Menu1, _("&File")); Menu2 = new wxMenu(); MenuItem2 = new wxMenuItem(Menu2, idMenuAbout, _("About\tF1"), _("Show info about this application"), wxITEM_NORMAL); Menu2->Append(MenuItem2); MenuBar1->Append(Menu2, _("Help")); SetMenuBar(MenuBar1); StatusBar1 = new wxStatusBar(this, ID_STATUSBAR1, 0, _T("ID_STATUSBAR1")); int __wxStatusBarWidths_1[1] = { -1 }; int __wxStatusBarStyles_1[1] = { wxSB_NORMAL }; StatusBar1->SetFieldsCount(1,__wxStatusBarWidths_1); StatusBar1->SetStatusStyles(1,__wxStatusBarStyles_1); SetStatusBar(StatusBar1); Center(); Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NotebookTestFrame::OnQuit); Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NotebookTestFrame::OnButton2Click); Connect(idMenuQuit,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&NotebookTestFrame::OnQuit); Connect(idMenuAbout,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&NotebookTestFrame::OnAbout); //*) }
Gröstenteils von wxSmith erstellt. Die zusätzlichen 2 "uwPanel"e habe ich von Hand eingefügt, eigentlich wegen der Scrollbars des ScrolledWindow, welche anfangs auch nicht angezeigt wurden(den Thread im wxForum von Dir hab ich dabei auch gefunden
).
Ist auch nur 'ne TestApp, da ich mir die eigentliche App nicht mit Testcode voll müllen wollte.michme
-
Sorry wegen Doppelpost:
BoxSizer1->FitInside(ScrolledWindow1); löst das Problem.Danke für die Hilfe.
michme