Поделиться через


Обработчики для диапазонов схем сообщений

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

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

  • Сопоставления можно диапазоны идентификаторов команд:

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

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

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

Разделы описанные в этой статье:

  • Создание схемы запись сообщений

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

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

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

Создание схемы запись сообщений

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

ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)

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

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

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

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

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

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

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

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

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

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

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

public:
   afx_msg void OnDoSomething(UINT nID);

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

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

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

Когда могут использовать диапазоны? В качестве примера в обработке команды как команда увеличения в примере MFC HIERSVR. Эта команда увеличивает представление, время ее от 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 кнопок к один обработчик, записи сопоставления сообщений какTfи будет выглядеть так, как это:

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

См. также

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

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