Поделиться через


При вызове обработчиков обновления

Предположим, что пользователь щелкает мышь в меню "Файл", которое создает сообщение WM_INITMENUPOPUP. Механизм обновления фреймворка обновляет все элементы в меню "Файл" перед тем, как оно раскрывается, чтобы пользователь смог его увидеть.

Для этого платформа маршрутизирует команды обновления для всех элементов меню во всплывающем меню вдоль стандартной маршрутизации команд. Целевые объекты команд для маршрутизации имеют возможность обновлять элементы меню, сопоставляя команду обновления с соответствующей записью карты сообщений (формы ON_UPDATE_COMMAND_UI) и вызывая функцию "обработчик обновления". Таким образом, для меню с шестью элементами меню отправляются шесть команд обновления. Если обработчик обновления существует для идентификатора команды элемента меню, он вызывается для обновления. Если нет, платформа проверяет наличие обработчика для этого идентификатора команды и включает или отключает элемент меню соответствующим образом.

Если фреймворк не находит ON_UPDATE_COMMAND_UI запись во время маршрутизации команд, он автоматически включает объект пользовательского интерфейса, если где-то есть запись ON_COMMAND с тем же идентификатором команды. В противном случае он отключает объект пользовательского интерфейса. Таким образом, чтобы убедиться, что объект пользовательского интерфейса включен, укажите обработчик команды, которую объект создает или предоставляет обработчик обновления для него. См. рисунок в разделе User-Interface объекты и идентификаторы команд.

Можно отключить отключение объектов пользовательского интерфейса по умолчанию. Дополнительные сведения см. в члене класса m_bAutoMenuEnable в CFrameWnd.

Инициализация меню выполняется автоматически в платформе, когда приложение получает WM_INITMENUPOPUP сообщение. Во время цикла простоя фреймворк ищет маршрутизацию команд для обработчиков обновления кнопок примерно так же, как и для меню.

См. также

Практическое руководство. Обновление объектов User-Interface