Обработка сообщений от элемента управления

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

   
Функция О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, представляющую в программе
элемент управления "поле ввода".

  • Добавление переменной-члена CListBox.
  • Откройте ClassWizard, нажав CTRL+W. Щёлкните вкладку Member Variables.
  • В списке Class name выберите CConnectDialog.
  • В списке Control IDs укажите IDC_DESCRIPTION. Щелкните Add Variable.
  • В поле Member variable name введите m_editDesc.
  • В списке Category установите Control. Щелкните OK, чтобы добавить переменную.
    Рис.2. Добавление переменной m_editDesc
  • Щелкните ОК, чтобы закрыть ClassWizard.
  • Добавление обработчика OnSelChangeDsnlist().
  • Откройте ClassWizard, нажав CTRL+W. Щёлкните вкладку Message Maps.
  • В списке Object IDs выберите IDC_DSNLIST, затем в списке Messages щелкните
    LBN_SELCHANGE.
  • Щелкните Add Function. Примите OnSelchangeDsnlist в качестве имени функции.
    Рис.3. Добавление функции OnSelchangeDsnlist
  • Щелкните кнопку Edit Code. Замените строку комментария // TODO следующим кодом:
    int nCursel = m_lbDSN.GetCurSel();
    switch(nCursel)
    {
      case 0 : m_editDesc.SetWindowText("Accounting Data"); break;
      case 1 : m_editDesc.SetWindowText("Administration Data"); break;
      case 2 : m_editDesc.SetWindowText("Management Data"); break; 
    }
    

    Обратите внимание, что текст выводится в поле с помощью функции CWnd::SetWindowText().


    Рис.4. Текст функции OnSelchangeDsnlist

  • Соберите и запустите приложение МуАрр. Убедитесь в том, что поясняющий текст в диалоговом окне
    Connect to Data Source меняется в зависимости от выбираемой строки в списке Data Source.

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

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



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

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