wxWidgets: Menüs von MDI-Children



  • Hiho,

    ParentFrame ist eine Ableitung von wxMDIParentFrame .
    ChildFrame ist eine Ableitung von wxMDIChildFrame .

    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


Anmelden zum Antworten