В MFC реализован специальный механизм для обновления таких объектов интерфейса пользователя, как меню, панели управления и панели состояния. Этот механизм предусматривает передачу приложению команд обновления пользовательского интерфейса (update command user interface). Для обработки этих команд предназначена макрокоманда ON_UPDATE_COMMAND_UI, размещаемая в таблице сообщений класса.
Для каждой строки меню, для каждой кнопки панели управления и для каждого индикатора панели состояния передается отдельное сообщение. Время поступления команд пользовательского интерфейса зависит от самих обновляемых объектов.
Меню
В случае меню команды обновления передаются в момент, когда пользователь открывает меню. Для каждой строки меню посылается отдельное сообщение. В результате для всех строк меню, для которых в таблице сообщений приложения присутствуют макрокоманды ON_UPDATE_COMMAND_UI, вызываются соответствующие обработчики. Они могут изменить состояние меню - заблокировать отдельные строки меню, выделить их специальными символами O
и ·
.
Панели управления и состояния
Для кнопок панели управления и индикаторов панели состояния команды обновления передаются в период “бездействия” приложения, когда очередь сообщений приложения пуста.
Если очередь сообщений приложения пуста, вызывается метод OnIdle главного класса приложения. В приложении можно переопределить этот метод и выполнять какую-либо фоновую работу.
Метод OnIdle определен в классе CWinApp и по умолчанию выполняет обновление пользовательского интерфейса - передает команды обновления для тех кнопок панели управления и индикаторов панелей состояния, которые имеют в таблице сообщений приложения макрокоманду ON_UPDATE_COMMAND_UI. Эта макрокоманда вызывает методы-обработчики, которые могут изментть состояние кнопок и индикаторов панелей управления и панелей состояния.
Как правило, ряд строк меню и кнопок панелей управления имеют одинаковые идентификаторы. В этом случае для обработки команд обновления строк меню и кнопок панели управления вызываются одни и те же методы.
Органы диалоговых панелей управления
Не только меню и панели управления обновляются с использованием механизма обновления. Точно также можно обновить и состояние кнопок и других органов управления диалоговых панелей.