На этом шаге мы рассмотрим механизм программного изменения пользовательского интерфейса.
Каркас приложения генерирует сообщения, извещающие MFC-программу о необходимости изменения состояния элементов пользовательского интерфейса. Когда такие сообщения возникают (например, при открытии контекстного меню или при простого приложения), в картах сообщений тех объектов, которым адресуется подобное сообщение, ищутся записи ON_UPDATE_COMMAND_UI, описывающие связь идентификатора команды с функцией-обработчиком.
Вы можете создать собственные функции-обработчики обновления пользовательского интерфейса, видоизменяющие пункты меню и кнопки панели инструментов. В качестве единственного параметра этой функции передается указатель на объект CCmdUI. Класс CCmdUI предоставляет доступ к элементу пользовательского интерфейса, связанному с обработчиком, а один из методов класса, список которых приведен в таблице 1, позволяет изменить внешний вид данного элемента.
Метод | Назначение |
---|---|
Enable() | Значение TRUE делает соответствующий элемент интерфейса доступным, a FALSE блокирует его. Недоступные пункты меню затемняются |
SetCheck() | Если задано значение TRUE, пункт меню помечается галочкой, а кнопка панели инструментов становится доступной. Если параметр равен FALSE, галочки у названия команды в меню нет, а кнопка панели инструментов блокируется |
SetRadio() | Действует аналогично SetCheck, только оперирует командой пользовательского интерфейса как элементом группы переключателей. При этом остальные команды группы не очищаются автоматически, если, конечно, это явно не реализовано в них самих |
SetText() | Изменяет текст команды пользовательского интерфейса. Не влияет на кнопки панели инструментов |
Добавим в класс СМуАррАрр обработку команд обновления пользовательского интерфейса, которые изменяют состояние команд Connect и Upload и соответствующих кнопок панели инструментов.
Рис.1. Задание параметров для ClassWizard
pCmdUI->SetCheck(m_isDatabaseConnected);
Рис.2. Задание текста функции OnUpdateDataConnect()
Методу SetCheck() передается параметр типа BOOL. При значении параметра TRUE метод выбирает команду, а при FALSE - сбрасывает ее. Назначение кода - отобразить состояние переменной m_isDatabaseConnected, показывающей наличие соединения с базой данных.
Теперь установим обработку обновления пользовательского интерфейса для команды Upload.
pCmdUI->Enable(m_isDatabaseConnected);
Метод Enable() имеет один параметр типа BOOL. Значение параметра TRUE делает команду доступной, a FALSE блокирует ее. Код разрешает выполнение команды только при установленном соединении с базой данных, то есть при СМуАррАрр::m_isDatabaseConnected, равной TRUE.
На следующем шаге мы рассмотрим запись в строку состояния.