Menubar ändern



  • Ich möchte in einer Menubar ein Menu mit seinem Untermenu ändern.
    Dafür möcht ich das 1. Untermenu komplett mit einem neuen austauschen.

    CMenu* pMenu = AfxGetMainWnd()->GetMenu();
    CMenu* pSubMenu = pMenu->GetSubMenu(0);
    
    pSubMenu->DestroyMenu();
    
    pSubMenu->CreateMenu();
    pSubMenu->AppendMenu(MF_STRING,ID_SubMenu1,L"Fuck You");
    pSubMenu->AppendMenu(MF_STRING,ID_SubMenu2,L"Kick Ass");
    SetMenu(pSubMenu);
    

    aber nix passiert. es wird mir zwar die Menubar angezeigt, aber wenn ich auf den ersten Menupunkt klicke geht kein Submenu auf.



  • Das liegt daran, dass du kein SubMenü definiert hast.
    Mit der Anweisung

    CMenu* pMenu = AfxGetMainWnd()->GetMenu();
    CMenu* pSubMenu = pMenu->GetSubMenu(0);
    
    pSubMenu->DestroyMenu();
    
    pSubMenu->CreateMenu();
    pSubMenu->AppendMenu(MF_STRING,ID_SubMenu1,L"Fuck You");
    pSubMenu->AppendMenu(MF_STRING,ID_SubMenu2,L"Kick Ass");
    SetMenu(pSubMenu); // <- Main Menü wird gesetzt.
    

    ersetzt du nur das vorhandene Menü mit den grade eben erstellen Menü.
    Die Menüpunkte müsstest du in pMenu erstellen und anschließend zwei pSubMenu's die du dann an pMenu anhängst,



  • Also als MenuBar ist ein Menu mit Submenu alles erstellt. Ich will jetzt das 1 Submenu komplett durch ein neues austauschen, welches ich aber erst zur Laufzeit definiere.

    Da hab ich zu allererst das Submenu zerstört pSubMenu->Destroy();
    ich denk mal das ist ok und dann erzeug ich ein neues (weiss nicht ob ich hier noch speicher erzeugen muss)...

    ja weiss nicht wie ich die neuen inhalte nun an das Hauptmenu ranhänge (es gibt ja kein SetSubMenu(int nPos, CMenu*) oder so...

    Mit

    SetMenu(pSubMenu); // <- Main Menü wird gesetzt.

    wird das Hauptmenu auch nicht ersetze - es passiert einfach gar nix ausser das ich keinen Zugriff auf das erste Untermenu mehr hab.

    also meine frage bleibt, wie definier ich denn ein submenu im code richtig und wie weise ich das dem hauptmenu vernünftig zu??



  • Kleines Beispiel das ein Menü anhängt

    CMenu *pMenu = AfxGetMainWnd()->GetMenu(); // Menü holen
    	CMenu *pSubMenu = new CMenu(); // Menü erstellen
    
            // Submenü erstellen
    	pSubMenu->CreateMenu();
    	pSubMenu->AppendMenu(MF_STRING,ID_VIEW_TOOLBAR,"Test 1");
    	pSubMenu->AppendMenu(MF_STRING,ID_VIEW_TOOLBAR,"Test 2");
    
            // Submenü anhängen
    	pMenu->AppendMenu(MF_POPUP,(UINT)pSubMenu->m_hMenu,"Top Menü Punkt");
    	DrawMenuBar();
    


  • MainFrm.obj : error LNK2019: unresolved external symbol "public: void __cdecl CWnd::DrawMenuBar(void)" (?DrawMenuBar@CWnd@@QAAXXZ) referenced in function "public: void __cdecl CMainFrame::RefreshMenu(void)" (?RefreshMenu@CMainFrame@@QAAXXZ)

    uhhh... der Link-Error kommt bei DrawMenuBar();
    (embedded VC++)



  • Rio1 schrieb:

    (embedded VC++)

    Mit embedded kenne ich mich gar nicht aus, sorry. Im normalen VC++ funktioniert dies...



  • ja das ist identisch in vielen sachen mit der VC++ umgebung. Es gibt auch eine DrawMenuBar(); Funktion. gibts nicht einen anderen weg das menubar neu zu zeichnen?



  • Vielleicht über Invalidate oder InvalidateRect



  • ne ändert nichts. vorallem wird am Menu (Hauptmenu) nie was geändert egal was ich mache. z.b. pMenu->DeleteMenu(0,MF_BYPOSITION) - ändert auch nix.



  • Rio1 schrieb:

    ne ändert nichts. vorallem wird am Menu (Hauptmenu) nie was geändert egal was ich mache. z.b. pMenu->DeleteMenu(0,MF_BYPOSITION) - ändert auch nix.

    Dies liegt wahrscheinlich daran das die Menüleiste neu gezeichnet werden muss.



  • ohh ich seh grad, dass die Instanz mit der ich das Menubar erzeuge von der Klasse CCeCommandBar ist, und die enthält auch ein DrawMenuBar(int nButton);

    nButton - Specifies the zero-based index of the menu bar within the command bar

    ?? aber mal probieren.

    tja ändert auch nix bei nButton = 0;



  • hier der junge mensch hat vor einem jahr die selben probleme:

    http://www.eggheadcafe.com/forumarchives/pocketpcdevelopernetworking/Nov2005/post24149416.asp



  • also mit m_wndCommandBar.DrawMenuBar(int nButton) lieg ich schon richtig.
    ich glaub der nButton stimmt noch nicht.
    Ich weiss nicht was für nButton da angegeben werden soll.
    wenns alles i.O. laufen sollte, wird ein TRUE zurückgegeben werden.
    Bei mir kommt immer FALSE als Ergebnis (egal was ich mache)



  • hier ich hab hier noch was gefunden, aber konnt noch nicht allzuviel damit anfangen:

    http://www.pocketpcdn.com/articles/cmdbar_menu.html
    http://www.pocketpcdn.com/forum/viewtopic.php?t=355
    http://www.pocketpcrussia.com/7933-4.htm

    irgendwie wird bei CCeCommandbar das Menu nur durch Buttons einer Toolbar simuliert. Mhhh... wenn wer dazu noch ein Plan hat.



  • Also ich habs nun geschafft nach der Anleitung im russ. Forum (siehe obere antwort) den Text des ersten Button der Toolbar (weil das Hauptmenü des CCeCommandBar ist wohl nix anderes) zu ändern. Tja aber leider ist es mir noch nicht gelungen ein komplettes Submenu als Pop-UP daran nun auszutauschen/anzuhängen)

    vielleicht hat wer noch eine idee?

    Weiss jemand wie ich die Anzahl der vorhandenen Menueinträge eines SubMenüs ermitteln kann?


Anmelden zum Antworten