Откройте ClassWizard и найдите в списке Object IDs строку ID_DEMO_GRAYED (рис. 14). Теперь свяжите с этим идентификатором метод-обработчик, но вместо знакомой строки COMMAND щелкните в списке Messages на строке UPDATE_COMMAND_UI, как показано на рис. 14. Сокращение UI означает «user interface», то есть «пользовательский интерфейс».
Рис. 14. Подключение метода обновления пользовательского интерфейса
В результате будет создан новый метод OnUpdateDemoGrayed():
void CFullmenusView::OnUpdateDemoGrayed(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
Этот метод будет вызываться программой перед отображением новой команды меню, и в нем можно заблокировать команду. Ему передается параметр pCmdUI, представляющий собой указатель на объект класса CCmdUI – методы этого класса перечислены в табл. 1
Таблица 1. Методы класса CCmdUI
Метод | Назначение |
ContinueRouting | Сообщает механизму передачи команд о необходимости продолжить пересылку текущего сообщения по цепочке обработчиков |
Enable | Устанавливает или снимает блокировку элемента пользовательского интерфейса, соответствующего данной команде |
SetCheck | Устанавливает пометку для элемента пользовательского интерфейса, соответствующего данной команде |
SetRadio | Аналогичен методу SetCheck, но применяется для переключателей |
SetText | Задает текст для элемента пользовательского интерфейса, соответствующего данной команде |
В этом методе заблокируем команду меню. Для этого следует вызвать метод Enable() объект CCmdUI, передав ему значение false:
|
|
void CFullmenusView::OnUpdateDemoGrayed(CCmdUI* pCmdUI)
{
pCmdUI->Enable(false);
}
Описанный способ позволяет блокировать отдельные команды меню и делать их недоступными для пользователя.