Я пытаюсь отключить/серые элементы меню с помощью метода CMenu::EnableMenuItem()
.Почему я не могу отключить/отключить меню? (MFC)
У меня есть переменная CMenu*
pMenu
, которая ссылается на верхнее меню диалога. Я могу получить подменю, используя pMenu->GetSubMenu(int)
и используя submenu->GetMenuStringA()
, проверить имена подменю/пунктов меню, которые я возвращаю. Тем не менее, у меня проблемы с методом EnableMenuItem()
. Предположим, что это меню File
. В нем есть New
и Open
всплывающие меню и Import
, Close
и Close All
пункты меню. New
и Open
имеют элементы подменю. (Например New->Document
) Использование submenu->EnableMenuItem([position of submenu/menuitem], MF_BYPOSITION | MF_GRAYED);
я могу отключить New
или Open
, однако функция не для Import
, Close
и Close All
, а также все пункты меню с New
и Open
.
Примечание: Когда я говорю EnableMenuItem()
, я не имею в виду, что он возвращает -1. Он возвращает предыдущий статус, но меню не становится отключенным или недоступным.
В документации MSDN для EnableMenuItem()
: http://msdn.microsoft.com/en-us/library/h62wh3y1.aspx утверждается, что это будет работать как для всплывающих окон, так и для стандартных пунктов меню. Однако, похоже, это работает только для всплывающих окон.
Я понимаю, что вы говорите, но это не совсем то, что я пытаюсь сделать. Я не пытаюсь включить/отключить элементы с приложением. Я вызываю все эти методы во внешнем приложении. – Amre
Вы окончательно не сможете это сделать! Вместо этого вы должны отправлять специальные сообщения в приложение MFC, сообщая ему, что некоторые пункты меню должны быть серыми. А затем в приложении MFC вы сможете использовать обработчик ON_UPDATE_COMMAND_UI для их включения/выключения. Я не могу представить другого способа для приложения MFC. –
Есть ли способ вызвать oncommand или обработчик сообщений Bn_clicked, если я знаю идентификатор элемента меню? Я пробовал использовать sendmessage и postmessage, проходящие в дескрипторе главного окна и BN_CLICKED и WM_COMMAND, но это не работает. – Amre