На этом шаге мы рассмотрим механизм программного изменения пользовательского интерфейса.
Каркас приложения генерирует сообщения, извещающие MFC-программу о необходимости изменения
состояния элементов пользовательского интерфейса. Когда такие сообщения возникают (например, при открытии
контекстного меню или при простого приложения), в картах сообщений тех объектов, которым адресуется
подобное сообщение, ищутся записи ON_UPDATE_COMMAND_UI, описывающие связь идентификатора
команды с функцией-обработчиком.
Вы можете создать собственные функции-обработчики обновления пользовательского интерфейса, видоизменяющие
пункты меню и кнопки панели инструментов. В качестве единственного параметра этой функции передается указатель
на объект CCmdUI. Класс CCmdUI предоставляет доступ к элементу пользовательского интерфейса,
связанному с обработчиком, а один из методов класса, список которых приведен в таблице 1, позволяет изменить
внешний вид данного элемента.
Таблица 1. Методы класса CCmdUI
Метод | Назначение |
---|---|
Enable() | Значение TRUE делает соответствующий элемент интерфейса доступным, a FALSE блокирует его. Недоступные пункты меню затемняются |
SetCheck() | Если задано значение TRUE, пункт меню помечается галочкой, а кнопка панели инструментов становится доступной. Если параметр равен FALSE, галочки у названия команды в меню нет, а кнопка панели инструментов блокируется |
SetRadio() | Действует аналогично SetCheck, только оперирует командой пользовательского интерфейса как элементом группы переключателей. При этом остальные команды группы не очищаются автоматически, если, конечно, это явно не реализовано в них самих |
SetText() | Изменяет текст команды пользовательского интерфейса. Не влияет на кнопки панели инструментов |
Добавим в класс СМуАррАрр обработку команд обновления пользовательского интерфейса, которые
изменяют состояние команд Connect и Upload и соответствующих кнопок панели инструментов.
- Добавление обработчика OnUpdateDataConnect() в класс СМуАррАрр.
- Чтобы открыть ClassWizard, нажмите CTRL+W в окне проекта МуАрр. Щелкните
вкладку Message Maps и выполните следующее:- в списке Class Name выберите СМуАррАрр;
- в списке Object IDs - ID_DATA_CONNECT;
- в списке Messages - UPDATE_COMMAND_UI.
Рис.1. Задание параметров для ClassWizard - Щелкните Add Function. В появившемся диалоговом окне подтвердите OnUpdateDataConnect() в качестве имени функции-обработчика,
щелкнув ОК. - Щелкните Edit Code. Откроется файл МуАрр.срр; курсор будет установлен в начале функции.
- Вместо строки комментария с текстом //TODO введите следующую строку:
pCmdUI->SetCheck(m_isDatabaseConnected);
Рис.2. Задание текста функции OnUpdateDataConnect()
Методу SetCheck() передается параметр типа BOOL. При значении параметра TRUE метод
выбирает команду, а при FALSE - сбрасывает ее. Назначение кода - отобразить состояние переменной
m_isDatabaseConnected, показывающей наличие соединения с базой данных. - Добавление обработчика OnUpdateDataUpload() в класс СМуАррАрр.
Повторите предыдущие действия, создав в классе СМуАррАрр метод OnUpdateDataUpload(),
обрабатывающий сообщение UPDATE_COMMAND_UI при вызове команды ID_DATA_UPLOAD.
В тексте метода OnUpdateDataUpload() вместо строки комментария //TODO введите следующий код:pCmdUI->Enable(m_isDatabaseConnected);
Метод Enable() имеет один параметр типа BOOL. Значение параметра TRUE делает команду
доступной, a FALSE блокирует ее. Код разрешает выполнение команды только при установленном соединении
с базой данных, то есть при СМуАррАрр::m_isDatabaseConnected, равной TRUE. - Соберите и запустите программу СМуАрр. Обратите внимание на то, что после выбора команды
Connect изменяются соответствующий пункт меню и кнопка панели инструментов, а команда Upload становится доступной.
Теперь установим обработку обновления пользовательского интерфейса для команды Upload.
Текст измененного приложения можно взять здесь (44,4 Кб).
На следующем шаге мы рассмотрим запись в строку состояния.