I am trying to disable main menu items. in MDI application, this works:
CWnd *pW=AfxGetMainWnd();
CMenu * pMenu=pW->GetMenu();
pMenu->EnableMenuItem(5, MF_BYPOSITION | MF_GRAYED | MF_DISABLED);
Not in SDI. Most likely, I am putting it into the wrong place. CMainframe? The view? Which speific subroutine? I tried the constructors, but no change in UI.
Any help is appreciated, I am banging my head and searched numerous web places (and here) but didn't find the right direction.
many thanks
You don't want to directly enable/disable menu items under MFC, whether it's SDI or MDI.
Instead, when you add the item to the menu, you add two event handlers for it. One will be for "COMMAND", the other for "UPDATE_COMMAND_UI".
the
COMMANDhandler actually carries out the command for that menu entry.The
UPDATE_COMMAND_UIhandler (indirectly) enables/disables the menu entry by returning true/false to indicate whether it should be enabled.As to why this is preferable: first and foremost, because you can have (for example) both a menu entry and a toolbar that invoke the same action. This automatically enables/disables both as appropriate.