wxWidgets: Menüs von MDI-Children
-
Hiho,
ParentFrame
ist eine Ableitung vonwxMDIParentFrame
.
ChildFrame
ist eine Ableitung vonwxMDIChildFrame
.ParentFrame
hat eine Menüleiste für ein paar allgemeine Dinge wie zum Beispiel Datei/Neu.Und jetzt mein Problem: Das
ChildFrame
soll auch ein paar Menüs definieren.
Das Funktioniert auch soweit ganz gut, aber: Es wird das Menü des Parents nicht mehr angezeigt...Das ganze sieht bei mir ungefähr so aus:
void ParentFrame::CreateControls() { // Menüleiste wxMenuBar* menubar = new wxMenuBar; SetMenuBar(menubar); // Dateimenü wxMenu* filemenu = new wxMenu; menubar->Append(filemenu, wxT("Datei")); // Datei > Neu wxMenuItem* item_new = new wxMenuItem(filemenu, wxID_NEW, wxT("Neu")); filemenu->Append(item_new); // Weitere Menüs ... }
void ChildFrame::CreateControls() { // Menü wird genauso angelegt wie oben // nur eben andere Menüs, andere Menüpukte, etc... }
Es wird immer nur das Menü der Children angezeigt...
Bis alle geschlossen sind, dann erscheint das Menü des Parent...EDIT:
Ich habe hier mal ein kleines Programm geschrieben.
Vielleicht wirds dann verständlicher#include <wx/wx.h> class ParentFrame : public wxMDIParentFrame { public: ParentFrame(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE | wxFRAME_NO_WINDOW_MENU ) { wxMDIParentFrame::Create(parent, id, title, pos, size, style); wxMenuBar* menubar = new wxMenuBar; SetMenuBar(menubar); wxMenu* menu = new wxMenu; menu->Append(new wxMenuItem(menu, wxID_ANY, wxT("Aktualisieren"))); menubar->Append(menu, wxT("Parent-Menü")); } }; class ChildFrame : public wxMDIChildFrame { public: ChildFrame( wxMDIParentFrame* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE ) { wxMDIChildFrame::Create(parent, id, title, pos, size, style); wxMenuBar* menubar = new wxMenuBar; SetMenuBar(menubar); wxMenu* menu = new wxMenu; menu->Append(new wxMenuItem(menu, wxID_ANY, wxT("Aktualisieren"))); menubar->Append(menu, wxT("Child-Menü")); } }; class MyApp : public wxApp { public: bool OnInit() { ParentFrame* p = new ParentFrame(NULL, wxID_ANY, wxT("Parent")); ChildFrame* c = new ChildFrame( p, 1, wxT("Child")); p->Show(); return true; } }; IMPLEMENT_APP(MyApp)
-
Inzwischen hab' ich schon rausbekommen, dass das Menü des Parents wohl einfach im child nochmal deklariert werden muss.
das wirft bei mir noch eine Frage auf: Was, wenn sich das Menü des Parent ändert?
muss ich das dann immer manuell im child auch ergänzen, oder gibt es eine möglichkeit an die menübar des parents ranzukommen?
zum beispiel so was:GetMenuBar()
-> Gibt einen Zeiger auf die Menubar eines Fensters aus