Я пытаюсь отключить пункты главного меню.
в приложении MDI это работает:
CWnd *pW=AfxGetMainWnd();
CMenu * pMenu=pW->GetMenu();
pMenu->EnableMenuItem(5, MF_BYPOSITION | MF_GRAYED | MF_DISABLED);
Не в SDI. Скорее всего, я ставлю это не туда. CMainFrame? Вид? Какая конкретная подпрограмма? Я попробовал конструкторы, но без изменений в интерфейсе.
Любая помощь приветствуется, я бьюсь головой и обыскала множество веб-сайтов (и здесь), но не нашла правильного направления.
большое спасибо
Вы не хотите напрямую включать / отключать пункты меню в MFC, будь то SDI или MDI.
Вместо этого, когда вы добавляете элемент в меню, вы добавляете для него два обработчика событий. Один будет для «КОМАНДА», другой для «UPDATE_COMMAND_UI».
COMMAND
Обработчик фактически выполняет команду для этого пункта меню.
UPDATE_COMMAND_UI
Обработчик (косвенно) включает / отключает пункт меню, возвращая true / false, чтобы указать, нужно ли его включить.
Что касается того, почему это предпочтительнее: в первую очередь, потому что вы можете иметь (например) как пункт меню, так и панель инструментов, которая вызывает одно и то же действие. Это автоматически включает / отключает оба при необходимости.
Вы можете сделать это с помощью мастера классов, чтобы добавить функцию, которая обрабатывает включение / отключение пунктов меню через UPDATE_COMMAND_UI:
void CMyAdoMfcView::OnUpdateAddnew(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(true);
}
в моем коде я включил пункт меню AddNew
,