Обработка команд обновления пользовательского интерфейса

   
На этом шаге мы рассмотрим механизм программного изменения пользовательского интерфейса.

   
Каркас приложения генерирует сообщения, извещающие 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, показывающей наличие соединения с базой данных.

  •    
    Теперь установим обработку обновления пользовательского интерфейса для команды Upload.

  • Добавление обработчика OnUpdateDataUpload() в класс СМуАррАрр.
    Повторите предыдущие действия, создав в классе СМуАррАрр метод OnUpdateDataUpload(),
    обрабатывающий сообщение UPDATE_COMMAND_UI при вызове команды ID_DATA_UPLOAD.
    В тексте метода OnUpdateDataUpload() вместо строки комментария //TODO введите следующий код:

        pCmdUI->Enable(m_isDatabaseConnected);
    

       
    Метод Enable() имеет один параметр типа BOOL. Значение параметра TRUE делает команду
    доступной, a FALSE блокирует ее. Код разрешает выполнение команды только при установленном соединении
    с базой данных, то есть при СМуАррАрр::m_isDatabaseConnected, равной TRUE.

  • Соберите и запустите программу СМуАрр. Обратите внимание на то, что после выбора команды
    Connect изменяются соответствующий пункт меню и кнопка панели инструментов, а команда Upload становится доступной.

Текст измененного приложения можно взять здесь (44,4 Кб).

   
На следующем шаге мы рассмотрим запись в строку состояния.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий