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."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.