Reputation: 57
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
Upvotes: 2
Views: 319
Reputation: 3911
you can do that by using class wizard to add function that handles Enabling/disabling menu items via UPDATE_COMMAND_UI:
void CMyAdoMfcView::OnUpdateAddnew(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(true);
}
in my code I enabled the menu item AddNew
.
Upvotes: 0
Reputation: 490468
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 COMMAND
handler actually carries out the command for that menu entry.
The UPDATE_COMMAND_UI
handler (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.
Upvotes: 1