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

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

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

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



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

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