Обработчики для диапазонов Сообщение- Сопоставления
В этой статье описывается сопоставление диапазон сообщений с одной функции обработчика сообщений (вместо сопоставления одного сообщения только одну функцию).
Время, когда требуется обработать несколько уведомление сообщения или элемента управления способом те же.В таких случаях может пожелать сопоставления сообщения с одной функции обработчика.Диапазоны Сообщение-сопоставления позволяют сделать это для непрерывного диапазона сообщений:
Можно сопоставить диапазона идентификаторов команд:
Функция обработчика команды.
Функция обработчика обновления команды.
Сообщения можно сопоставить элемент управления-уведомления для диапазона идентификаторов элементов управления в функцию обработки сообщений.
Разделы покрытые в этой статье.
Записи сообщение-сопоставления
Объявление функции обработчика
Пример диапазона идентификаторов команд
Пример диапазона идентификаторов элементов управления
Записи Сообщение-Сопоставления
В 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 сообщения, что этот случай.Затем можно предпринимать некоторые другие действия в зависимости от которой кнопка была нажата.