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


Макросы схемы сообщений

Эти макросы определяют карты сообщений и записи.

Имя Описание
ALT_MSG_MAP Помечает начало альтернативной карты сообщений.
BEGIN_MSG_MAP Помечает начало карты сообщений по умолчанию.
CHAIN_MSG_MAP_ALT Цепочки к альтернативной карте сообщений в базовом классе.
CHAIN_MSG_MAP_ALT_MEМБ ER Цепочки к альтернативной карте сообщений в элементе данных класса.
CHAIN_MSG_MAP Цепочки к сопоставлению сообщений по умолчанию в базовом классе.
CHAIN_MSG_MAP_DYNAMIC Цепочки к карте сообщений в другом классе во время выполнения.
CHAIN_MSG_MAP_MEМБ ER Цепочки к сопоставлению сообщений по умолчанию в элементе данных класса.
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_MEМБ ER Цепочки к сопоставлению сообщений по умолчанию в элементе данных класса.
CHAIN_MSG_MAP_ALT Цепочки к альтернативной карте сообщений в базовом классе.
CHAIN_MSG_MAP_ALT_MEМБ ER Цепочки к альтернативной карте сообщений в элементе данных класса.
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_MEМБ ER

Определяет запись в карте сообщений.

CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)

Параметры

ChainMember
[in] Имя элемента данных, содержащего карту сообщений.

msgMapID
[in] Идентификатор карты сообщений.

Замечания

CHAIN_MSG_MAP_ALT_MEМБ ER направляет сообщения на альтернативную карту сообщений в элементе данных. Необходимо объявить эту альтернативную карту сообщений с помощью ALT_MSG_MAP(msgMapID). Чтобы направлять сообщения на карту сообщений по умолчанию члена данных (объявленную с BEGIN_MSG_MAP), используйте CHAIN_MSG_MAP_MEМБ ER. Пример см. в разделе CHAIN_MSG_MAP_MEМБ ER.

Примечание.

Всегда начинайте карту сообщений с 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_MEМБ ER

Определяет запись в карте сообщений.

CHAIN_MSG_MAP_MEMBER(theChainMember)

Параметры

ChainMember
[in] Имя элемента данных, содержащего карту сообщений.

Замечания

CHAIN_MSG_MAP_MEМБ ER направляет сообщения на карту сообщений по умолчанию члена данных (объявленную с BEGIN_MSG_MAP). Чтобы направлять сообщения на альтернативную карту сообщений члена данных (объявленную с ALT_MSG_MAP), используйте CHAIN_MSG_MAP_ALT_MEМБ ER.

Примечание.

Всегда начинайте карту сообщений с 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] Имя функции обработчика сообщений.

См. также

Макросы