Обработчики для диапазонов Сообщение- Сопоставления

В этой статье описывается сопоставление диапазон сообщений с одной функции обработчика сообщений (вместо сопоставления одного сообщения только одну функцию).

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

  • Можно сопоставить диапазона идентификаторов команд:

    • Функция обработчика команды.

    • Функция обработчика обновления команды.

  • Сообщения можно сопоставить элемент управления-уведомления для диапазона идентификаторов элементов управления в функцию обработки сообщений.

Разделы покрытые в этой статье.

  • Записи сообщение-сопоставления

  • Объявление функции обработчика

  • Пример диапазона идентификаторов команд

  • Пример диапазона идентификаторов элементов управления

Записи Сообщение-Сопоставления

В cpp-файле, добавьте в новую запись сообщение-сопоставления, как показано в следующем примере:

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

Запись сообщение-сопоставления состоит из следующих элементов:

  • Макрос диапазона сообщение-сопоставления:

  • Параметры к макросу.

    Первые 2 параметра макроса принимают 3:

    • Идентификатор команды, начинается диапазон

    • Идентификатор команды, диапазон

    • Имя функции обработчика сообщений

    Диапазон идентификаторов команд должно быть сопредельно.

    Третий макрос, ON_CONTROL_RANGE, принимает дополнительный первый параметр. сообщение элемент управления-уведомления, как EN_CHANGE.

Объявление функции обработчика

Добавьте в объявление функции обработчика. Файл з.В следующем коде показано, как это может выглядеть, как показано ниже:

public:
   afx_msg void OnDoSomething(UINT nID);

Функции обработчика для отдельных команд, как правило, не принимают параметры.Кроме функций обработчика обновления функции обработчика для диапазонов сообщение-сопоставления требуют дополнительного параметра, nID типа uint.Этот параметр первый параметр.Дополнительный параметр адаптирует extra идентификатор команды, необходимые для определения, команда фактически пользователь выбрал.

Дополнительные сведения о требованиях к параметру для обновления функции обработчика см. в разделе Пример диапазона идентификаторов команд.

Пример диапазона идентификаторов команд

Если вы диапазона могут использовать?Примером в обработке команды, как команда увеличения в образце GlobalUnlock MFC.Эта команда может увеличиваться представление, масштабирование она между 25% и 300% своего обычного размера.Класс HIERSVR представления используется диапазон для обработки команды масштаба при записи сообщение-сопоставления походя образом:

ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)

При написании запись сообщение-сопоставления указывается:

  • 2 Идентификаторов, начало и конечный тэги команды сопредельное диапазон.

    Здесь они ID_VIEW_ZOOM25 и ID_VIEW_ZOOM300.

  • Имя функции обработчика для команд.

    Вот это OnZoom.

Объявление функции походило бы это:

public:
   afx_msg void OnZoom(UINT nID);

Случае функций обработчика обновления аналогичен и может быть более широкой полезным.Это довольно часто, чтобы написать обработчики ON_UPDATE_COMMAND_UI для нескольких команд и найти запись или копировать тот же код с обходом и более.Решение сопоставления диапазона идентификаторов команд до одной функции обработчика обновления использование макроса ON_UPDATE_COMMAND_UI_RANGE.Идентификаторы команд должны сформирован сопредельное диапазон.Пример см. в разделе обработчик OnUpdateZoom и запись сообщение-сопоставления ON_UPDATE_COMMAND_UI_RANGE в классе представления образца HIERSVR.

Функции обработчика обновления для отдельных команд, как правило, принимают один параметр, pCmdUI типа CCmdUI*.В отличие от функции обработчика, функции-ловушки обновления для диапазонов сообщение-сопоставления не требуют дополнительного параметра, nID типа uint.Идентификатор команды, который необходимо, чтобы пользователь выбрал определить, какая команда фактически, отображается в объекте CCmdUI.

Пример диапазона идентификаторов элементов управления

Другой вариант сопоставляет элемент рамка сообщения управления-уведомления для диапазона идентификаторов элементов управления к одному обработчику.Предположим, что пользователь может щелкнуть любую из 10 кнопок.Чтобы сопоставить все 10 кнопок в одном обработчике, в новую запись сообщение-сопоставления но может выглядеть следующим образом:

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)    

При записи макроса ON_CONTROL_RANGE в сопоставлении сообщений указывается:

  • Указанное сообщение управления-уведомления элемент.

    Вот это BN_CLICKED.

  • Значения идентификаторов элементов управления, связанных с непрерывных диапазона элементов управления.

    Ниже приведены эти IDC_BUTTON1 и IDC_BUTTON10.

  • Имя функции обработчика сообщений.

    Вот это OnButtonClicked.

При написании функция обработчика укажите uint дополнительный параметр, как показано ниже:

void CRangesView::OnButtonClicked( UINT nID )
{
    int nButton = nID - IDC_BUTTON1;
    ASSERT( nButton >= 0 && nButton < 10 );
    // ...
}

Обработчик OnButtonClicked для одного сообщения BN_CLICKED не принимает параметры.Один и тот же обработчик для диапазона кнопок принимает одно uint.Дополнительный параметр позволяет указать конкретный элемент управления, который отвечает за создание сообщение BN_CLICKED.

Код, приведенный в примере, является типичным. преобразования значения прошл к int в пределах диапазона и assert сообщения, что этот случай.Затем можно предпринимать некоторые другие действия в зависимости от которой кнопка была нажата.

См. также

Основные понятия

Объявление функции обработчика сообщений