В SDI: где отключить меню, код ОК в MDI

Я пытаюсь отключить пункты главного меню.
в приложении MDI это работает:

CWnd *pW=AfxGetMainWnd();
CMenu * pMenu=pW->GetMenu();
pMenu->EnableMenuItem(5, MF_BYPOSITION | MF_GRAYED | MF_DISABLED);

Не в SDI. Скорее всего, я ставлю это не туда. CMainFrame? Вид? Какая конкретная подпрограмма? Я попробовал конструкторы, но без изменений в интерфейсе.

Любая помощь приветствуется, я бьюсь головой и обыскала множество веб-сайтов (и здесь), но не нашла правильного направления.

большое спасибо

2

Решение

Вы не хотите напрямую включать / отключать пункты меню в MFC, будь то SDI или MDI.

Вместо этого, когда вы добавляете элемент в меню, вы добавляете для него два обработчика событий. Один будет для «КОМАНДА», другой для «UPDATE_COMMAND_UI».

введите описание изображения здесь

COMMAND Обработчик фактически выполняет команду для этого пункта меню.

UPDATE_COMMAND_UI Обработчик (косвенно) включает / отключает пункт меню, возвращая true / false, чтобы указать, нужно ли его включить.

Что касается того, почему это предпочтительнее: в первую очередь, потому что вы можете иметь (например) как пункт меню, так и панель инструментов, которая вызывает одно и то же действие. Это автоматически включает / отключает оба при необходимости.

1

Другие решения

Вы можете сделать это с помощью мастера классов, чтобы добавить функцию, которая обрабатывает включение / отключение пунктов меню через UPDATE_COMMAND_UI:

void CMyAdoMfcView::OnUpdateAddnew(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(true);
}

в моем коде я включил пункт меню AddNew,

0

По вопросам рекламы [email protected]