Макросы схемы сообщений
Эти макросы определяют карты сообщений и записи.
Имя | Описание |
---|---|
ALT_MSG_MAP | Помечает начало альтернативной карты сообщений. |
BEGIN_MSG_MAP | Помечает начало карты сообщений по умолчанию. |
CHAIN_MSG_MAP_ALT | Цепочки к альтернативной карте сообщений в базовом классе. |
CHAIN_MSG_MAP_ALT_MEMBER | Цепочки к альтернативной карте сообщений в элементе данных класса. |
CHAIN_MSG_MAP | Цепочки к сопоставлению сообщений по умолчанию в базовом классе. |
CHAIN_MSG_MAP_DYNAMIC | Цепочки к карте сообщений в другом классе во время выполнения. |
CHAIN_MSG_MAP_MEMBER | Цепочки к сопоставлению сообщений по умолчанию в элементе данных класса. |
COMMAND_CODE_HANDLER | Сопоставляет сообщение WM_COMMAND с функцией обработчика на основе кода уведомления. |
COMMAND_HANDLER | Сопоставляет сообщение WM_COMMAND с функцией обработчика на основе кода уведомления и идентификатора элемента меню, элемента управления или акселератора. |
COMMAND_ID_HANDLER | Сопоставляет сообщение WM_COMMAND с функцией обработчика на основе идентификатора элемента меню, элемента управления или акселератора. |
COMMAND_RANGE_CODE_HANDLER | Сопоставляет сообщение WM_COMMAND с функцией обработчика на основе кода уведомления и непрерывного диапазона идентификаторов элементов управления. |
COMMAND_RANGE_HANDLER | Сопоставляет сообщение WM_COMMAND с функцией обработчика на основе непрерывного диапазона идентификаторов элементов управления. |
DECLARE_EMPTY_MSG_MAP | Реализует пустую карту сообщений. |
DEFAULT_REFLECTION_HANDLER | Предоставляет обработчик по умолчанию для отраженных сообщений, которые не обрабатываются в противном случае. |
END_MSG_MAP | Помечает конец карты сообщений. |
FORWARD_NOTIFICATIONS | Перенаправит сообщения уведомления в родительское окно. |
MESSAGE_HANDLER | Сопоставляет сообщение Windows с функцией обработчика. |
MESSAGE_RANGE_HANDLER | Сопоставляет непрерывный диапазон сообщений Windows с функцией обработчика. |
NOTIFY_CODE_HANDLER | Сопоставляет сообщение WM_NOTIFY с функцией обработчика на основе кода уведомления. |
NOTIFY_HANDLER | Сопоставляет сообщение WM_NOTIFY с функцией обработчика на основе кода уведомления и идентификатора элемента управления. |
NOTIFY_ID_HANDLER | Сопоставляет сообщение WM_NOTIFY с функцией обработчика на основе идентификатора элемента управления. |
NOTIFY_RANGE_CODE_HANDLER | Сопоставляет сообщение WM_NOTIFY с функцией обработчика на основе кода уведомления и непрерывного диапазона идентификаторов элементов управления. |
NOTIFY_RANGE_HANDLER | Сопоставляет сообщение WM_NOTIFY с функцией обработчика на основе непрерывного диапазона идентификаторов элементов управления. |
REFLECT_NOTIFICATIONS | Отражает сообщения уведомления обратно в окно, которое отправило их. |
REFLECTED_COMMAND_CODE_HANDLER | Сопоставляет отраженное WM_COMMAND сообщение с функцией обработчика на основе кода уведомления. |
REFLECTED_COMMAND_HANDLER | Сопоставляет отражаемое сообщение WM_COMMAND с функцией обработчика на основе кода уведомления и идентификатора элемента меню, элемента управления или акселератора. |
REFLECTED_COMMAND_ID_HANDLER | Сопоставляет отраженное WM_COMMAND сообщение с функцией обработчика на основе идентификатора элемента меню, элемента управления или акселератора. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | Сопоставляет отраженное WM_COMMAND сообщение с функцией обработчика на основе кода уведомления и непрерывного диапазона идентификаторов элементов управления. |
REFLECTED_COMMAND_RANGE_HANDLER | Сопоставляет отраженное WM_COMMAND сообщение с функцией обработчика на основе непрерывного диапазона идентификаторов элементов управления. |
REFLECTED_NOTIFY_CODE_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе кода уведомления. |
REFLECTED_NOTIFY_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе кода уведомления и идентификатора элемента управления. |
REFLECTED_NOTIFY_ID_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе идентификатора элемента управления. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе кода уведомления и непрерывного диапазона идентификаторов элементов управления. |
REFLECTED_NOTIFY_RANGE_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе непрерывного диапазона идентификаторов элементов управления. |
Требования
Заголовок: atlwin.h
ALT_MSG_MAP
Помечает начало альтернативной карты сообщений.
ALT_MSG_MAP(msgMapID)
Параметры
msgMapID
[in] Идентификатор карты сообщений.
Замечания
ATL определяет каждую карту сообщений по числу. Карта сообщений по умолчанию (объявленная с помощью макроса BEGIN_MSG_MAP) определяется по 0. Альтернативная карта сообщений определяется msgMapID.
Карты сообщений используются для обработки сообщений, отправленных в окно. Например, CContainedWindow позволяет указать идентификатор карты сообщений в содержаемом объекте. Затем CContainedWindow::WindowProc использует эту карту сообщений для направления сообщений автономного окна в соответствующую функцию обработчика или в другую карту сообщений. Список макросов, объявляющих функции обработчика, см . BEGIN_MSG_MAP.
Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений.
Макрос END_MSG_MAP помечает конец карты сообщений. Обратите внимание, что всегда существует один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Пример
В следующем примере показана карта сообщений по умолчанию и одна альтернативная карта сообщений, каждая из которых содержит одну функцию обработчика:
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
В следующем примере показаны две альтернативные карты сообщений. Карта сообщений по умолчанию пуста.
BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
Требования
Заголовок: atlwin.h
BEGIN_MSG_MAP
Помечает начало карты сообщений по умолчанию.
BEGIN_MSG_MAP(theClass)
Параметры
TheClass
[in] Имя класса, содержащего карту сообщений.
Замечания
CWindowImpl::WindowProc использует карту сообщений по умолчанию для обработки сообщений, отправленных в окно. Карта сообщений направляет сообщения в соответствующую функцию обработчика или в другую карту сообщений.
Следующие макросы сопоставляют сообщение с функцией обработчика. Эта функция должна быть определена в классе.
Макрос | Description |
---|---|
MESSAGE_HANDLER | Сопоставляет сообщение Windows с функцией обработчика. |
MESSAGE_RANGE_HANDLER | Сопоставляет непрерывный диапазон сообщений Windows с функцией обработчика. |
COMMAND_HANDLER | Сопоставляет сообщение WM_COMMAND с функцией обработчика на основе кода уведомления и идентификатора элемента меню, элемента управления или акселератора. |
COMMAND_ID_HANDLER | Сопоставляет сообщение WM_COMMAND с функцией обработчика на основе идентификатора элемента меню, элемента управления или акселератора. |
COMMAND_CODE_HANDLER | Сопоставляет сообщение WM_COMMAND с функцией обработчика на основе кода уведомления. |
COMMAND_RANGE_HANDLER | Сопоставляет непрерывный диапазон сообщений WM_COMMAND с функцией обработчика на основе идентификатора элемента меню, элемента управления или акселератора. |
NOTIFY_HANDLER | Сопоставляет сообщение WM_NOTIFY с функцией обработчика на основе кода уведомления и идентификатора элемента управления. |
NOTIFY_ID_HANDLER | Сопоставляет сообщение WM_NOTIFY с функцией обработчика на основе идентификатора элемента управления. |
NOTIFY_CODE_HANDLER | Сопоставляет сообщение WM_NOTIFY с функцией обработчика на основе кода уведомления. |
NOTIFY_RANGE_HANDLER | Сопоставляет непрерывный диапазон сообщений WM_NOTIFY с функцией обработчика на основе идентификатора элемента управления. |
Следующие макросы направляют сообщения на другую карту сообщений. Этот процесс называется цепочкой.
Макрос | Description |
---|---|
CHAIN_MSG_MAP | Цепочки к сопоставлению сообщений по умолчанию в базовом классе. |
CHAIN_MSG_MAP_MEMBER | Цепочки к сопоставлению сообщений по умолчанию в элементе данных класса. |
CHAIN_MSG_MAP_ALT | Цепочки к альтернативной карте сообщений в базовом классе. |
CHAIN_MSG_MAP_ALT_MEMBER | Цепочки к альтернативной карте сообщений в элементе данных класса. |
CHAIN_MSG_MAP_DYNAMIC | Цепочки к карте сообщений по умолчанию в другом классе во время выполнения. |
Следующие макросы направляют "отраженные" сообщения из родительского окна. Например, элемент управления обычно отправляет сообщения уведомления в родительское окно для обработки, но родительское окно может отражать сообщение обратно в элемент управления.
Макрос | Description |
---|---|
REFLECTED_COMMAND_HANDLER | Сопоставляет отражаемое сообщение WM_COMMAND с функцией обработчика на основе кода уведомления и идентификатора элемента меню, элемента управления или акселератора. |
REFLECTED_COMMAND_ID_HANDLER | Сопоставляет отраженное WM_COMMAND сообщение с функцией обработчика на основе идентификатора элемента меню, элемента управления или акселератора. |
REFLECTED_COMMAND_CODE_HANDLER | Сопоставляет отраженное WM_COMMAND сообщение с функцией обработчика на основе кода уведомления. |
REFLECTED_COMMAND_RANGE_HANDLER | Сопоставляет отраженное WM_COMMAND сообщение с функцией обработчика на основе непрерывного диапазона идентификаторов элементов управления. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | Сопоставляет отраженное WM_COMMAND сообщение с функцией обработчика на основе кода уведомления и непрерывного диапазона идентификаторов элементов управления. |
REFLECTED_NOTIFY_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе кода уведомления и идентификатора элемента управления. |
REFLECTED_NOTIFY_ID_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе идентификатора элемента управления. |
REFLECTED_NOTIFY_CODE_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе кода уведомления. |
REFLECTED_NOTIFY_RANGE_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе непрерывного диапазона идентификаторов элементов управления. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | Сопоставляет отраженное WM_NOTIFY сообщение с функцией обработчика на основе кода уведомления и непрерывного диапазона идентификаторов элементов управления. |
Пример
class CMyExtWindow : public CMyBaseWindow
{
public:
BEGIN_MSG_MAP(CMyExtWindow)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
CHAIN_MSG_MAP(CMyBaseWindow)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnSetFocus(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
CMyExtWindow
Когда объект получает сообщение WM_PAINT, сообщение направляется на CMyExtWindow::OnPaint
фактическую обработку. Если OnPaint
указано, что сообщение требует дальнейшей обработки, сообщение будет перенаправлено на карту сообщений по умолчанию.CMyBaseWindow
Помимо карты сообщений по умолчанию можно определить альтернативную карту сообщений с ALT_MSG_MAP. Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений. В следующем примере показана карта сообщений по умолчанию и одна альтернативная карта сообщений, каждая из которых содержит одну функцию обработчика:
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
В следующем примере показаны две альтернативные карты сообщений. Карта сообщений по умолчанию пуста.
BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
Макрос END_MSG_MAP помечает конец карты сообщений. Обратите внимание, что всегда существует один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Требования
Заголовок: atlwin.h
CHAIN_MSG_MAP_ALT
Определяет запись в карте сообщений.
CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)
Параметры
ChainClass
[in] Имя базового класса, содержащего карту сообщений.
msgMapID
[in] Идентификатор карты сообщений.
Замечания
CHAIN_MSG_MAP_ALT направляет сообщения на альтернативную карту сообщений в базовом классе. Необходимо объявить эту альтернативную карту сообщений с помощью ALT_MSG_MAP(msgMapID). Чтобы направлять сообщения на карту сообщений по умолчанию базового класса (объявленную с BEGIN_MSG_MAP), используйте CHAIN_MSG_MAP. Пример см. в CHAIN_MSG_MAP.
Примечание.
Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений с помощью ALT_MSG_MAP. Макрос END_MSG_MAP помечает конец карты сообщений. Каждая карта сообщений должна иметь ровно один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Требования
Заголовок: atlwin.h
CHAIN_MSG_MAP_ALT_MEMBER
Определяет запись в карте сообщений.
CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)
Параметры
ChainMember
[in] Имя элемента данных, содержащего карту сообщений.
msgMapID
[in] Идентификатор карты сообщений.
Замечания
CHAIN_MSG_MAP_ALT_MEMBER направляет сообщения на альтернативную карту сообщений в элементе данных. Необходимо объявить эту альтернативную карту сообщений с помощью ALT_MSG_MAP(msgMapID). Чтобы направлять сообщения на карту сообщений по умолчанию члена данных (объявленную с BEGIN_MSG_MAP), используйте CHAIN_MSG_MAP_MEMBER. Пример см. в CHAIN_MSG_MAP_MEMBER.
Примечание.
Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений с помощью ALT_MSG_MAP. Макрос END_MSG_MAP помечает конец карты сообщений. Каждая карта сообщений должна иметь ровно один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Требования
Заголовок: atlwin.h
CHAIN_MSG_MAP
Определяет запись в карте сообщений.
CHAIN_MSG_MAP(theChainClass)
Параметры
ChainClass
[in] Имя базового класса, содержащего карту сообщений.
Замечания
CHAIN_MSG_MAP направляет сообщения на карту сообщений по умолчанию базового класса (объявленную с BEGIN_MSG_MAP). Чтобы направить сообщения на альтернативную карту сообщений базового класса (объявленную с ALT_MSG_MAP), используйте CHAIN_MSG_MAP_ALT.
Примечание.
Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений с помощью ALT_MSG_MAP. Макрос END_MSG_MAP помечает конец карты сообщений. Каждая карта сообщений должна иметь ровно один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Пример
class CMyExtClass : public CMyBaseClass
{
public:
BEGIN_MSG_MAP(CMyExtClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
// chain to default message map in CMyBaseClass
CHAIN_MSG_MAP(CMyBaseClass)
ALT_MSG_MAP(1)
// chain to first alternative message map in CMyBaseClass
CHAIN_MSG_MAP(CMyBaseClass)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CHAR, OnChar)
// chain to alternate message map in CMyBaseClass
CHAIN_MSG_MAP_ALT(CMyBaseClass, 1)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
В этом примере показано следующее:
Если процедура окна использует
CMyClass
карту сообщений по умолчанию иOnPaint
не обрабатывает сообщение, сообщение направляется наCMyBaseClass
карту сообщений по умолчанию для обработки.Если процедура окна использует первую альтернативную карту сообщений,
CMyClass
все сообщения направляются наCMyBaseClass
карту сообщений по умолчанию.Если процедура окна использует
CMyClass
вторую альтернативную карту сообщений иOnChar
не обрабатывает сообщение, сообщение направляется на указанную альтернативную карту сообщений.CMyBaseClass
CMyBaseClass
должно быть объявлено это сопоставление сообщений с ALT_MSG_MAP(1).
Требования
Заголовок: atlwin.h
CHAIN_MSG_MAP_DYNAMIC
Определяет запись в карте сообщений.
CHAIN_MSG_MAP_DYNAMIC(dynaChainID)
Параметры
dynaChainID
[in] Уникальный идентификатор карты сообщений объекта.
Замечания
CHAIN_MSG_MAP_DYNAMIC направляет сообщения во время выполнения на карту сообщений по умолчанию в другом объекте. Объект и его карта сообщений связаны с dynaChainID, который определяется с помощью CDynamicChainChain::SetChainEntry. Для использования CHAIN_MSG_MAP_DYNAMIC необходимо наследовать класс CDynamicChain
. Пример см. в обзоре CDynamicChain .
Примечание.
Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений с помощью ALT_MSG_MAP. Макрос END_MSG_MAP помечает конец карты сообщений. Каждая карта сообщений должна иметь ровно один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Требования
Заголовок: atlwin.h
CHAIN_MSG_MAP_MEMBER
Определяет запись в карте сообщений.
CHAIN_MSG_MAP_MEMBER(theChainMember)
Параметры
ChainMember
[in] Имя элемента данных, содержащего карту сообщений.
Замечания
CHAIN_MSG_MAP_MEMBER направляет сообщения на карту сообщений по умолчанию члена данных (объявленную с BEGIN_MSG_MAP). Чтобы направлять сообщения на альтернативную карту сообщений члена данных (объявленную с ALT_MSG_MAP), используйте CHAIN_MSG_MAP_ALT_MEMBER.
Примечание.
Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений с помощью ALT_MSG_MAP. Макрос END_MSG_MAP помечает конец карты сообщений. Каждая карта сообщений должна иметь ровно один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Пример
class CMyContainerClass : public CWindowImpl<CMyContainerClass>
{
public:
CMyContainedClass m_obj;
BEGIN_MSG_MAP(CMyContainerClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
// chain to default message map of m_obj
CHAIN_MSG_MAP_MEMBER(m_obj)
ALT_MSG_MAP(1)
// chain to default message map of m_obj
CHAIN_MSG_MAP_MEMBER(m_obj)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CHAR, OnChar)
// chain to alternate message map of m_obj
CHAIN_MSG_MAP_ALT_MEMBER(m_obj, 1)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
В этом примере показано следующее:
Если процедура окна использует
CMyClass
карту сообщений по умолчанию иOnPaint
не обрабатывает сообщение, сообщение направляется наm_obj
карту сообщений по умолчанию для обработки.Если процедура окна использует первую альтернативную карту сообщений,
CMyClass
все сообщения направляются наm_obj
карту сообщений по умолчанию.Если процедура окна использует
CMyClass
вторую альтернативную карту сообщений иOnChar
не обрабатывает сообщение, сообщение направляется на указанную альтернативную картуm_obj
сообщений. КлассCMyContainedClass
должен объявить эту карту сообщений с ALT_MSG_MAP(1).
Требования
Заголовок: atlwin.h
COMMAND_CODE_HANDLER
Аналогично COMMAND_HANDLER, но сопоставляет сообщение WM_COMMAND только на основе кода уведомления.
COMMAND_CODE_HANDLER(code, func)
Параметры
code
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
COMMAND_HANDLER
Определяет запись в карте сообщений.
COMMAND_HANDLER(id, code, func)
Параметры
id
[in] Идентификатор элемента меню, элемента управления или акселератора.
code
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Замечания
COMMAND_HANDLER сопоставляет сообщение WM_COMMAND с указанной функцией обработчика на основе кода уведомления и идентификатора элемента управления. Например:
class ATL_NO_VTABLE CPolyProp :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CPolyProp, &CLSID_PolyProp>,
public IPropertyPageImpl<CPolyProp>,
public CDialogImpl<CPolyProp>
{
public:
BEGIN_COM_MAP(CPolyProp)
COM_INTERFACE_ENTRY(IPropertyPage)
END_COM_MAP()
BEGIN_MSG_MAP(CPolyProp)
COMMAND_HANDLER(IDC_SIDES, EN_CHANGE, OnEnChangeSides)
CHAIN_MSG_MAP(IPropertyPageImpl<CPolyProp>)
END_MSG_MAP()
// When a CPolyProp object receives a WM_COMMAND message identified
// by IDC_SIDES and EN_CHANGE, the message is directed to
// CPolyProp::OnEnChangeSides for the actual processing.
LRESULT OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/,
BOOL& /*bHandled*/);
Любая функция, указанная в макросе COMMAND_HANDLER, должна быть определена следующим образом:
LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
Перед вызовом сопоставление сообщений задает bHandled
значение TRUE CommandHandler
. Если CommandHandler
сообщение не полностью обрабатывается, оно должно иметь bHandled
значение FALSE, чтобы указать, что сообщение нуждается в дальнейшей обработке.
Примечание.
Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений с ALT_MSG_MAP. Макрос END_MSG_MAP помечает конец карты сообщений. Каждая карта сообщений должна иметь ровно один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Помимо COMMAND_HANDLER можно использовать MESSAGE_HANDLER для сопоставления сообщения WM_COMMAND без учета идентификатора или кода. В этом случае MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction)
все WM_COMMAND сообщения будут направляться в OnHandlerFunction
.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Требования
Заголовок: atlwin.h
COMMAND_ID_HANDLER
Аналогично COMMAND_HANDLER, но сопоставляет сообщение WM_COMMAND только на основе идентификатора элемента меню, элемента управления или акселератора.
COMMAND_ID_HANDLER(id, func)
Параметры
id
[in] Идентификатор элемента меню, элемента управления или акселератора, отправляющего сообщение.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
COMMAND_RANGE_CODE_HANDLER
Аналогично COMMAND_RANGE_HANDLER, но сопоставляет сообщения WM_COMMAND с определенным кодом уведомлений из диапазона элементов управления в одну функцию обработчика.
COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)
Параметры
idFirst
[in] Помечает начало непрерывного диапазона идентификаторов элементов управления.
idLast
[in] Помечает конец непрерывного диапазона идентификаторов элементов управления.
code
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Замечания
Этот диапазон основан на идентификаторе элемента меню, элемента управления или акселератора отправки сообщения.
Требования
Заголовок: atlwin.h
COMMAND_RANGE_HANDLER
Аналогично COMMAND_HANDLER, но сопоставляет сообщения WM_COMMAND из диапазона элементов управления с одной функцией обработчика.
COMMAND_RANGE_HANDLER( idFirst, idLast, func)
Параметры
idFirst
[in] Помечает начало непрерывного диапазона идентификаторов элементов управления.
idLast
[in] Помечает конец непрерывного диапазона идентификаторов элементов управления.
func
[in] Имя функции обработчика сообщений.
Замечания
Этот диапазон основан на идентификаторе элемента меню, элемента управления или акселератора отправки сообщения.
Требования
Заголовок: atlwin.h
DECLARE_EMPTY_MSG_MAP
Объявляет пустую карту сообщений.
DECLARE_EMPTY_MSG_MAP()
Замечания
DECLARE_EMPTY_MSG_MAP — это удобный макрос, который вызывает макросы BEGIN_MSG_MAP и END_MSG_MAP для создания пустой карты сообщений:
BEGIN_MSG_MAP(CExample)
END_MSG_MAP()
DEFAULT_REFLECTION_HANDLER
Предоставляет обработчик по умолчанию для дочернего окна (элемента управления), который будет получать отраженные сообщения; Обработчик будет правильно передавать необработанные сообщения DefWindowProc
.
DEFAULT_REFLECTION_HANDLER()
Требования
Заголовок: atlwin.h
END_MSG_MAP
Помечает конец карты сообщений.
END_MSG_MAP()
Замечания
Всегда используйте макрос BEGIN_MSG_MAP , чтобы пометить начало карты сообщений. Используйте ALT_MSG_MAP для объявления последующих альтернативных карт сообщений.
Обратите внимание, что всегда существует один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Пример
В следующем примере показана карта сообщений по умолчанию и одна альтернативная карта сообщений, каждая из которых содержит одну функцию обработчика:
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
В следующем примере показаны две альтернативные карты сообщений. Карта сообщений по умолчанию пуста.
BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
Требования
Заголовок: atlwin.h
FORWARD_NOTIFICATIONS
Перенаправит сообщения уведомления в родительское окно.
FORWARD_NOTIFICATIONS()
Замечания
Укажите этот макрос как часть карты сообщений.
Требования
Заголовок: atlwin.h
MESSAGE_HANDLER
Определяет запись в карте сообщений.
MESSAGE_HANDLER( msg, func )
Параметры
msg
[in] Сообщение Windows.
func
[in] Имя функции обработчика сообщений.
Замечания
MESSAGE_HANDLER сопоставляет сообщение Windows с указанной функцией обработчика.
Любая функция, указанная в макросе MESSAGE_HANDLER, должна быть определена следующим образом:
LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
Перед вызовом сопоставление сообщений задает bHandled
значение TRUE MessageHandler
. Если MessageHandler
сообщение не полностью обрабатывается, оно должно иметь bHandled
значение FALSE, чтобы указать, что сообщение нуждается в дальнейшей обработке.
Примечание.
Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений с ALT_MSG_MAP. Макрос END_MSG_MAP помечает конец карты сообщений. Каждая карта сообщений должна иметь ровно один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Помимо MESSAGE_HANDLER можно использовать COMMAND_HANDLER и NOTIFY_HANDLER для сопоставления WM_COMMAND и WM_NOTIFY сообщений соответственно.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Пример
class CMyBaseWindow : public CWindowImpl<CMyBaseWindow>
{
public:
BEGIN_MSG_MAP(CMyBaseWindow)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
// When a CMyBaseWindow object receives a WM_CREATE message, the message
// is directed to CMyBaseWindow::OnCreate for the actual processing.
LRESULT OnCreate(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
Требования
Заголовок: atlwin.h
MESSAGE_RANGE_HANDLER
Аналогично MESSAGE_HANDLER, но сопоставляет диапазон сообщений Windows с одной функцией обработчика.
MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )
Параметры
msgFirst
[in] Помечает начало непрерывного диапазона сообщений.
msgLast
[in] Помечает конец непрерывного диапазона сообщений.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
NOTIFY_CODE_HANDLER
Аналогично NOTIFY_HANDLER, но сопоставляет сообщение WM_NOTIFY только на основе кода уведомления.
NOTIFY_CODE_HANDLER(cd, func)
Параметры
cd
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
NOTIFY_HANDLER
Определяет запись в карте сообщений.
NOTIFY_HANDLER( id, cd, func )
Параметры
id
[in] Идентификатор элемента управления, отправляющего сообщение.
cd
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Замечания
NOTIFY_HANDLER сопоставляет сообщение WM_NOTIFY с указанной функцией обработчика на основе кода уведомления и идентификатора элемента управления.
Любая функция, указанная в макросе NOTIFY_HANDLER, должна быть определена следующим образом:
LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
Перед вызовом сопоставление сообщений задает bHandled
значение TRUE NotifyHandler
. Если NotifyHandler
сообщение не полностью обрабатывается, оно должно иметь bHandled
значение FALSE, чтобы указать, что сообщение нуждается в дальнейшей обработке.
Примечание.
Всегда начинайте карту сообщений с BEGIN_MSG_MAP. Затем можно объявить последующие карты альтернативных сообщений с ALT_MSG_MAP. Макрос END_MSG_MAP помечает конец карты сообщений. Каждая карта сообщений должна иметь ровно один экземпляр BEGIN_MSG_MAP и END_MSG_MAP.
Помимо NOTIFY_HANDLER можно использовать MESSAGE_HANDLER для сопоставления сообщения WM_NOTIFY без учета идентификатора или кода. В этом случае MESSAGE_HANDLER(WM_NOTIFY, OnHandlerFunction)
все WM_NOTIFY сообщения будут направляться в OnHandlerFunction
.
Дополнительные сведения об использовании карт сообщений в ATL см. в разделе "Карты сообщений".
Пример
class CMyDialog2 : public CDialogImpl<CMyDialog2>
{
public:
enum { IDD = IDD_MYDLG };
BEGIN_MSG_MAP(CMyDialog2)
NOTIFY_HANDLER(IDC_TREE1, NM_CLICK, OnNMClickTree1)
END_MSG_MAP()
public:
// When a CMyDialog2 object receives a WM_NOTIFY message
// identified by IDC_TREE1 and NM_CLICK, the message is
// directed to CMyDialog2::OnNMClickTree1 for the actual
// processing.
LRESULT OnNMClickTree1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);
};
Требования
Заголовок: atlwin.h
NOTIFY_ID_HANDLER
Аналогично NOTIFY_HANDLER, но сопоставляет сообщение WM_NOTIFY только на основе идентификатора элемента управления.
NOTIFY_ID_HANDLER( id, func )
Параметры
id
[in] Идентификатор элемента управления, отправляющего сообщение.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
NOTIFY_RANGE_CODE_HANDLER
Аналогично NOTIFY_RANGE_HANDLER, но сопоставляет сообщения WM_NOTIFY с определенным кодом уведомлений из диапазона элементов управления в одну функцию обработчика.
NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
Параметры
idFirst
[in] Помечает начало непрерывного диапазона идентификаторов элементов управления.
idLast
[in] Помечает конец непрерывного диапазона идентификаторов элементов управления.
cd
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Замечания
Этот диапазон основан на идентификаторе элемента управления, отправляющего сообщение.
Требования
Заголовок: atlwin.h
NOTIFY_RANGE_HANDLER
Аналогично NOTIFY_HANDLER, но сопоставляет сообщения WM_NOTIFY из диапазона элементов управления с одной функцией обработчика.
NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
Параметры
idFirst
[in] Помечает начало непрерывного диапазона идентификаторов элементов управления.
idLast
[in] Помечает конец непрерывного диапазона идентификаторов элементов управления.
func
[in] Имя функции обработчика сообщений.
Замечания
Этот диапазон основан на идентификаторе элемента управления, отправляющего сообщение.
Требования
Заголовок: atlwin.h
REFLECT_NOTIFICATIONS
Отражает сообщения уведомлений обратно в дочернее окно (элемент управления), отправляющее их.
REFLECT_NOTIFICATIONS()
Замечания
Укажите этот макрос как часть карты сообщений родительского окна.
Требования
Заголовок: atlwin.h
REFLECTED_COMMAND_CODE_HANDLER
Аналогично COMMAND_CODE_HANDLER, но команды карт отражаются в родительском окне.
REFLECTED_COMMAND_CODE_HANDLER( code, func )
Параметры
code
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
REFLECTED_COMMAND_HANDLER
Аналогично COMMAND_HANDLER, но команды карт отражаются в родительском окне.
REFLECTED_COMMAND_HANDLER( id, code, func )
Параметры
id
[in] Идентификатор элемента меню, элемента управления или акселератора.
code
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
REFLECTED_COMMAND_ID_HANDLER
Аналогично COMMAND_ID_HANDLER, но команды карт отражаются в родительском окне.
REFLECTED_COMMAND_ID_HANDLER( id, func )
Параметры
id
[in] Идентификатор элемента меню, элемента управления или акселератора.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
REFLECTED_COMMAND_RANGE_CODE_HANDLER
Аналогично COMMAND_RANGE_CODE_HANDLER, но команды карт отражаются в родительском окне.
REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )
Параметры
idFirst
[in] Помечает начало непрерывного диапазона идентификаторов элементов управления.
idLast
[in] Помечает конец непрерывного диапазона идентификаторов элементов управления.
code
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
REFLECTED_COMMAND_RANGE_HANDLER
Аналогично COMMAND_RANGE_HANDLER, но команды карт отражаются в родительском окне.
REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )
Параметры
idFirst
[in] Помечает начало непрерывного диапазона идентификаторов элементов управления.
idLast
[in] Помечает конец непрерывного диапазона идентификаторов элементов управления.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
REFLECTED_NOTIFY_CODE_HANDLER
Аналогично NOTIFY_CODE_HANDLER, но карты уведомлений, отраженные в родительском окне.
REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )
Параметры
cd
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
REFLECTED_NOTIFY_HANDLER
Аналогично NOTIFY_HANDLER, но карты уведомлений, отраженные в родительском окне.
REFLECTED_NOTIFY_HANDLER( id, cd, func )
Параметры
id
[in] Идентификатор элемента меню, элемента управления или акселератора.
cd
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
REFLECTED_NOTIFY_ID_HANDLER
Аналогично NOTIFY_ID_HANDLER, но карты уведомлений, отраженные в родительском окне.
REFLECTED_NOTIFY_ID_HANDLER( id, func )
Параметры
id
[in] Идентификатор элемента меню, элемента управления или акселератора.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
REFLECTED_NOTIFY_RANGE_CODE_HANDLER
Аналогично NOTIFY_RANGE_CODE_HANDLER, но карты уведомлений, отраженные в родительском окне.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
Параметры
idFirst
[in] Помечает начало непрерывного диапазона идентификаторов элементов управления.
idLast
[in] Помечает конец непрерывного диапазона идентификаторов элементов управления.
cd
[in] Код уведомления.
func
[in] Имя функции обработчика сообщений.
Требования
Заголовок: atlwin.h
REFLECTED_NOTIFY_RANGE_HANDLER
Аналогично NOTIFY_RANGE_HANDLER, но карты уведомлений, отраженные в родительском окне.
REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
Параметры
idFirst
[in] Помечает начало непрерывного диапазона идентификаторов элементов управления.
idLast
[in] Помечает конец непрерывного диапазона идентификаторов элементов управления.
func
[in] Имя функции обработчика сообщений.