Menü - Menueinträge verändern



  • Wie kann man ein MenuItem deaktivieren bzw. wieder aktivieren?



  • EnableMenuItem()



  • Ja klar. Aber wo bekomme ich die 1. Variable her?

    BOOL EnableMenuItem(HMENU hmenu, UINT uIDEnableItem, UINT uEnable)
    

    Mein Beispiel:

    EnableMenuItem(???,ID_DATEI_SPEICHERN,MF_ENABLED);
    

    [ Dieser Beitrag wurde am 03.03.2002 um 14:31 Uhr von hronny editiert. ]



  • so zb ...

    CMenu MainMenu, *pSubMenu;
            MainMenu.LoadMenu(IDR_MENU1);
            pSubMenu=MainMenu.GetSubMenu(1);
            pSubMenu->EnableMenuItem(0,MF_BYPOSITION | MF_ENABLED);
            SetMenu(&MainMenu);
    


  • Ich raff das nich! images/smiles/icon_confused.gif

    Den Code in die Menuroutine Laden integriert, Absturz!

    void CSportyDlg::OnMenu_DateiLaden() 
    {
      CMenu MainMenu, *pSubMenu;
      MainMenu.LoadMenu(IDR_Hauptmenu);
      pSubMenu=MainMenu.GetSubMenu(0);
      pSubMenu->EnableMenuItem(0, MF_ENABLED);
      SetMenu(&MainMenu);
    }
    
    +----------+----+    +------------------+-------+
    |Datei     |?   |    |IDR_Hauptmenu     |       |
    +----------+----+    +------------------+-------+
    |Neu       |Info|    |ID_DATEI_Neu      |ID_Info|
    |Laden     +----+    |ID_DATEI_LADEN    +-------+
    |Speichern |         |ID_DATEI_SPEICHERN|
    +----------+         +------------------+
    |Ende      |         |ID_ENDE           |
    +----------+         +------------------+
    

    [ Dieser Beitrag wurde am 03.03.2002 um 22:01 Uhr von hronny editiert. ]



  • dann probiers mal so:

    void CSportyDlg::OnMenu_DateiLaden() 
    {
      CMenu MainMenu, *pSubMenu;
      MainMenu = GetMenu();
      pSubMenu=MainMenu.GetSubMenu(0);
      pSubMenu->EnableMenuItem(0, MF_ENABLED);
      SetMenu(&MainMenu);
    }
    


  • Du hast vergessen die Detach funktion aufzurufen.

    Devil



  • Forlgende Fehlermeldung mit Deinem Code:

    error C2582: 'CMenu' : 'Operator =' ist nicht verfuegbar
    

    Fehler bezieht sich auf [code]MainMenu=GetMenu();[/code] denn bei GetMenu() muß ein Pointer vorne sein. Also pSubMenu:

    void CSportyDlg::OnMenu_DateiLaden() 
    {
      CMenu MainMenu, *pSubMenu, *pSub2Menu;
      pSubMenu=GetMenu();
      pSub2Menu=MainMenu.GetSubMenu(0);
      pSub2Menu->EnableMenuItem(1, MF_ENABLED);
      //Detach();
      SetMenu(&MainMenu);
    }
    

    Trotzdem Absturz!! images/smiles/icon_eek.gif

    [ Dieser Beitrag wurde am 04.03.2002 um 22:20 Uhr von hronny editiert. ]

    [ Dieser Beitrag wurde am 04.03.2002 um 22:21 Uhr von hronny editiert. ]



  • void CSportyDlg::OnMenu_DateiLaden() 
    {
      CMenu *MainMenu, *pSubMenu;
      MainMenu = GetMenu();
      pSubMenu=MainMenu->GetSubMenu(0);
      pSubMenu->EnableMenuItem(0, MF_ENABLED);
      SetMenu(MainMenu);
    }
    

    gehts so?



  • Geht jetzt!!! Aber bei [code]pSubMenu->EnableMenuItem(0,MF_ENABLED);[/code] muß die ID aus der Ressource gesetzt werden, dann funzt endlich!

    void CSportyDlg::OnMenu_DateiLaden() 
    {
      CMenu *MainMenu, *pSubMenu;
      MainMenu = GetMenu();
      pSubMenu=MainMenu->GetSubMenu(0);
      pSubMenu->EnableMenuItem(ID_DATEI_SPEICHERN, MF_ENABLED);
      SetMenu(MainMenu);
    }
    

    ->Wäre was für die FAQ!



  • ok, mach mers auch in die FAQ, als alternative zu devils beitrag für dynamische menüs ...


Anmelden zum Antworten