Menü per Quellcode erstellen



  • so in der Richtung:

    CMenu mNeu,mDatei;
    mNeu.CreatePopupMenu();
    
    mDatei.CreatePopupMenu();
    mDatei.AppendMenu(MF_STRING,NULL,"Öffnen");
    mDatei.AppendMenu(MF_STRING,NULL,"Speichern");
    mDatei.AppendMenu(MF_STRING,NULL,"Bearbeiten");
    mNeu.InsertMenu(0,MF_POPUP,(UINT)mDatei.m_hMenu,"Datei");
    
    mNeu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,[...],this);
    

    wie gesagt in der richtung...



  • @kreen
    Das was du geschrieben hast ist für ein POPUP Menü das über die Rechte Maustaste erreichbar ist. Bei mir geht es aber nicht um diese Menüs, sondern um die ganz normalen Menüs die sich an der TitelZeile befinden...



  • Versuche mal, das FileMenue nicht als eigenes CMenu zu erstellen, sondern über mainMenu.GetSubMenu() zu ermitteln.
    Und dann dessen Methode InsertMenu aufzurufen.



  • Dies habe ich auch schon versucht (siehe ganz oben erster Post von mir), leider brachte dies auch kein erfolg



  • Das muß gehen! 😉

    Hier ist es genauso beschrieben:
    http://www.c-plusplus.net/forum/topic%2C50293.html

    Übrigens ist ein PopUp Menu ein ganz normales Menue in der Titeleiste, das Aufpringt wenn man mit der Maus darauf klickt.
    Das Menue mit der rechten Maustaste nennt man Kontextmenu.



  • ich hab ja auch gesagt in der richtung...
    das läuft alles auf CMenu heraus deshalb ist das egal
    das was du willst ist auch blos nen popup nur is die position von windowrect abhängig



  • ich werde es im laufe der Woche nochmals versuchen.
    Aber schon mal danke für eure Hilfe... 😉



  • So,
    hab es doch nochmal schnell probiert. Der Auschlaggebende Punkt war das CreatePopupMenu. Hiermit funzt dies.
    Hier mal noch den Code, vielleicht kann diesen irgendwann mal jemand gebrauchen

    CMenu mainMenu;
    	CMenu *fileMenu = new CMenu;
    
    	mainMenu.CreateMenu();
    
    	fileMenu->CreatePopupMenu();
    	fileMenu->AppendMenu(MF_STRING,5000,"DummyEintrag");
    	fileMenu->AppendMenu(MF_STRING,5001,"DummyEintrag2");
    	fileMenu->AppendMenu(MF_STRING,5002,"DummyEintrag3");
    	fileMenu->AppendMenu(MF_STRING,5003,"DummyEintrag4 ");
    
    	mainMenu.AppendMenu(MF_POPUP,(unsigned int)fileMenu->GetSafeHmenu(),"Datei");
    
    	SetMenu(&mainMenu);
    


  • Hi

    und wie sprichst du dann die Menüpunkte an ? Hat das nicht was
    mit #define von den Nummern 500x zu tun ? So dass man auch eine
    Funktion starten kann mein ich.



  • @Spezi
    Ja, normalerweise werden anstatt den nummern definierte Wörter wie ID_CLOSE und so verwendet.

    #define ID_CLOSE 5000
    

    Dann kannst du statt

    fileMenu->AppendMenu(MF_STRING,5000,"DummyEintrag");
    

    einfach

    fileMenu->AppendMenu(MF_STRING,ID_CLOSE,"DummyEintrag");
    

    schreiben!
    Anschließend musst du in der MESSAGE_MAP die funktionen zuweisen

    BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
         ON_COMMAND(ID_CLOSE, OnClose)
    END_MESSAGE_MAP()
    

    Dies bleibt also wie die ganze Zeit auch. Mir Persönlich ging es nur um das Dynamische erstellen des Menüs. Bin zur Zeit Anfänger mit der MFC und finde diese Sachen doch schon irgendwo wichtig. Will ja mal auch irgendetwas Programmieren können das dynamisch über DLL dateien (Plugins) oder so eigene Menüpunkte hinzufügen kann. Theoretischer weise könnte ich aber auch bei dem ON_COMMAND einfach die 5000 reinschreiben.


Anmelden zum Antworten