Шаг 50.
Среда программирования Visual C++.
Обработка сообщений от элемента управления

    На этом шаге мы рассмотрим обработку сообщений от элемента управления.

    Функция ОnОК(), реализации которой посвящен предыдущий шаг, представляет собой пример обработчика уведомляющего сообщения от элемента управления. Посредством уведомляющих сообщении элементы управления и прочие дочерние окна оповещают родительское окно о том, что между пользователем и этим элементом произошел обмен информацией. Функция ОnОК() обрабатывает сообщение BN_CLICKED, посылаемое в диалоговое окно в качестве параметра сообщения WM_COMMAND, когда пользователь щелкает кнопку ОК.

    С разными типами элементов управления связаны разные наборы уведомляющих сообщений. В ClassWizard имеется средство обработки любых уведомляющих сообщений, исходящих от элементов управления диалогового окна. Чтобы увидеть весь список этих сообщений, щелкните вкладку Message Maps мастера и выберите в поле Class Name имя класса диалога, а затем в списке Object IDs щелкните идентификатор элемента управления. Перечень уведомляющих сообщений, которые могут быть сгенерированы выбранным элементом управления, появится в поле Messages. Краткое пояснение для выделенного сообщения высвечивается в поле Description внизу вкладки.

    На рисунке 1 показана вкладка Message Maps диалогового окна MFC ClassWizard и список уведомляющих сообщений для поля ввода (имеющего в данном случае идентификатор IDC_USERID).


Рис.1. Применение ClassWizard для обработки уведомляющих сообщений от элемента управления

    Идентификаторы уведомляющих сообщений имеют префиксы, состоящие из аббревиатуры названия типа элемента управления и символов N_.

Таблица 1. Префиксы идентификаторов уведомляющих сообщений от элемента управления
Префикс идентификатора уведомляющего сообщения Тип элемента управления
BN_ Кнопка (button)
CBN_ Поле со списком (combo box)
CLBN_ Список с флажками (check list box)
EN_ Поле ввода (edit control)
LBN_ Список (list box)
STN_ Статический текст (static text control)

    ClassWizard автоматически вставит в карту сообщений записи для обработки уведомляющего сообщения для каждого перечисленного типа элемента управления. Имя макроса формируется из приставки ON_ и идентификатора сообщения. Например, при создании обработчика уведомляющего сообщения EN_UPDATE для поля ввода IDC_USERID (рисунок 1) в карту сообщений будет добавлена запись, аналогичная приведенной ниже:

  ON_EN_UPDATE(IDC_USERID, OnUpdateUserid)


    Примечание. Уведомляющие сообщения BN_CLICKED кнопок с идентификаторами IDОК и IDCANCEL обрабатываются в перегруженных версиях виртуальных функций CDialog::OnOK() и CDialog:: OnCancel(). Записи в карте сообщений появятся лишь в случае, если функции, обрабатывающих эти сообщения, имеют другие имена. В большинстве случаев рекомендуется использовать имена ОnОК и OnCancel.

    В MFC средствами макросов ON_CONTROL и ON_NOTIFY можно организовать обработку нестандартных сообщений. ClassWizard применяет макрос ON_NOTIFY для обработки уведомлений от новь стандартных элементов управления, появившихся в более поздних версиях Windows.

    Добавим функцию-обработчик для уведомляющего сообщения, генерируемого при изменении выбранной строки в списке Data Source. С помощью функции-обработчика отобразим справочную информацию для выбранной строки в поле под списком. Сначала потребуется создать переменную CEdit, представляющую в программе элемент управления "поле ввода".

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

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




Предыдущий шаг Содержание Следующий шаг