menüeinträge



  • hallo

    ich würde gern wissen wie man bestimmte menüeinträge in einem menu deaktiviert bzw. aktiviert.

    danke schonmal ...



  • EnableMenuItem



  • void ChangeMenu(int User)
    {
    switch(User)
    {
    case DefaultUser:
    if(EnableMenuItem( (HMENU)MAKEINTRESOURCE(IDR_MAIN_MENU),
    (UINT)IDM_PROGRAMM_NEW,
    MF_GRAYED) == 0xFFFFFFFF)
    {
    error("Fehler");
    }
    break;
    }
    }

    klappt nich 😞

    ich habs auch schon mit ModifyItem probiert ...
    ich hab auch schon die verschiedensten Variationen ausprobiert - wegen MAKEINTRESOURCE und so ...

    mach ich da irgendwas falsch?



  • (HMENU)MAKEINTRESOURCE(IDR_MAIN_MENU)

    Das funktioniert so natürlich nicht - du kannst nicht einfach die ID in ein Menu-Handle casten 😉
    An so ein Menu-Handle kommst du, je nach Bedarf, z.B. über GetMenu, LoadMenu, GetSystemMenu o.ä. 🙂



  • hat geklappt, danke...



  • noch eine frage zu dem thema:

    wie kann ich einen ganzen menütitel (z.b. "Ansicht") deaktivieren?
    überlegung: er braucht dazu eine ID.
    wenn ich ihm aber nun eine ID gebe...

    POPUP "&Ansicht",ID_ANSICHT
      BEGIN
        MENUITEM "&Raster\tCtrl+R",ID_ANSICHT_RASTER
        MENUITEM "&Textbox\tCtrl+T",ID_ANSICHT_TEXTBOX
        MENUITEM "&Einstellungen\tCtrl+P",ID_ANSICHT_SETTINGS
      END
    

    ...dann wird gar kein menü mehr angezeigt.

    einen einzelnen eintrag deaktiviere ich so:

    HMENU hMenu=GetMenu(hAppWnd);
        EnableMenuItem(hMenu,(UINT)ID_ANSICHT_RASTER,MF_GRAYED );
    

    (funktioniert prima)



  • "Ansicht" ist ja auch kein MENUITEM.



  • hmm.. so wie ich das verstanden habe, ist es sehr wohl ein MenuItem:

    MSDN schrieb:

    "A menu bar typically contains menu names, but it can also contain command items. A submenu typically contains command items, but it can also contain items that open nested submenus.
    [...]
    When the user chooses an enabled menu item, the system sends a command message to the owner window or displays the corresponding submenu, depending on what kind of menu item it is."

    http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/menus/aboutmenus.asp#menu_items

    habe aber immer noch nicht ganz verstanden, wie ich "Ansicht" grayen kann..



  • Um das Handle des Bar-Items zu erhalten kannst du auch "GetMenuItemID()" verwenden, aber davon mal abgesehen, hast du in der MSDN zu der EnableMenuItem() Funktion auch folgendes gelesen:

    Remarks

    An application must use the MF_BYPOSITION flag to specify the correct menu handle. If the menu handle to the menu bar is specified, the top-level menu item (an item in the menu bar) is affected. To set the state of an item in a drop-down menu or submenu by position, an application must specify the handle to the drop-down menu or submenu.


Anmelden zum Antworten