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


Макросы для работы с составными элементами управления

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

Макрос Description
BEGIN_SINK_MAP Помечает начало карты приемника событий для составного элемента управления.
END_SINK_MAP Помечает конец карты приемника событий для составного элемента управления.
SINK_ENTRY Запись на карту приемника событий.
SINK_ENTRY_EX Запись в карту приемника событий с дополнительным параметром.
SINK_ENTRY_EX_P (Visual Studio 2017) Аналогично SINK_ENTRY_EX, за исключением того, что он принимает указатель на iid.
SINK_ENTRY_INFO Запись на карту приемника событий с данными типа, предоставленными вручную для использования с IDispEventSimpleImplImpl.
SINK_ENTRY_INFO_P (Visual Studio 2017) Аналогично SINK_ENTRY_INFO за исключением того, что он принимает указатель на iid.

Требования

Заголовок: atlcom.h

BEGIN_SINK_MAP

Объявляет начало карты приемника событий для составного элемента управления.

BEGIN_SINK_MAP(_class)

Параметры

_Класса
[in] Указывает элемент управления.

Пример

BEGIN_SINK_MAP(CMyCompositeCtrl)
   //Make sure the Event Handlers have __stdcall calling convention
   SINK_ENTRY(IDC_CALENDAR1, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar1)
   SINK_ENTRY(IDC_CALENDAR2, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar2)
END_SINK_MAP()

Замечания

Реализация CE ATL приемников событий ActiveX поддерживает только возвращаемые значения типа HRESULT или void из методов обработчика событий. Любое другое возвращаемое значение не поддерживается, и его поведение не определено.

END_SINK_MAP

Объявляет конец карты приемника событий для составного элемента управления.

END_SINK_MAP()

Пример

BEGIN_SINK_MAP(CMyCompositeCtrl)
   //Make sure the Event Handlers have __stdcall calling convention
   SINK_ENTRY(IDC_CALENDAR1, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar1)
   SINK_ENTRY(IDC_CALENDAR2, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar2)
END_SINK_MAP()

Замечания

Реализация CE ATL приемников событий ActiveX поддерживает только возвращаемые значения типа HRESULT или void из методов обработчика событий. Любое другое возвращаемое значение не поддерживается, и его поведение не определено.

SINK_ENTRY

Объявляет функцию обработчика (fn) для указанного события (диспида), определяемого идентификатором элемента управления.

SINK_ENTRY( id, dispid, fn )

Параметры

id
[in] Определяет элемент управления.

Dispid
[in] Определяет указанное событие.

Fn
[in] Имя функции обработчика событий. Эта функция должна использовать _stdcall соглашение о вызовах и иметь соответствующую подпись в стиле dispinterface.

Пример

BEGIN_SINK_MAP(CMyCompositeCtrl)
   //Make sure the Event Handlers have __stdcall calling convention
   SINK_ENTRY(IDC_CALENDAR1, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar1)
   SINK_ENTRY(IDC_CALENDAR2, DISPID_CLICK, &CMyCompositeCtrl::ClickCalendar2)
END_SINK_MAP()

Замечания

Реализация CE ATL приемников событий ActiveX поддерживает только возвращаемые значения типа HRESULT или void из методов обработчика событий. Любое другое возвращаемое значение не поддерживается, и его поведение не определено.

SINK_ENTRY_EX и SINK_ENTRY_EX_P

Объявляет функцию обработчика (fn) для указанного события (dispid), интерфейса диспетчера (iid), для элемента управления, определяемого идентификатором.

SINK_ENTRY_EX( id, iid, dispid, fn )
SINK_ENTRY_EX_P( id, piid, dispid, fn ) // (Visual Studio 2017)

Параметры

id
[in] Определяет элемент управления.

Iid
[in] Определяет интерфейс диспетчера.

piid
[in] Указатель на интерфейс диспетчера.

Dispid
[in] Определяет указанное событие.

Fn
[in] Имя функции обработчика событий. Эта функция должна использовать _stdcall соглашение о вызовах и иметь соответствующую подпись в стиле dispinterface.

Пример

BEGIN_SINK_MAP(CMyCompositCtrl2)
   //Make sure the Event Handlers have __stdcall calling convention
   SINK_ENTRY_EX(IDC_CALENDAR1, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar1)
   SINK_ENTRY_EX(IDC_CALENDAR2, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar2)
END_SINK_MAP()

Замечания

Реализация CE ATL приемников событий ActiveX поддерживает только возвращаемые значения типа HRESULT или void из методов обработчика событий. Любое другое возвращаемое значение не поддерживается, и его поведение не определено.

SINK_ENTRY_INFO и SINK_ENTRY_INFO_P

Используйте макрос SINK_ENTRY_INFO в карте приемника событий, чтобы предоставить сведения, необходимые IDispEventSimpleImplImpl для маршрутизации событий в соответствующую функцию обработчика.

SINK_ENTRY_INFO( id, iid, dispid, fn, info )
SINK_ENTRY_INFO_P( id, piid, dispid, fn, info ) // (Visual Studio 2017)

Параметры

id
[in] Целое число без знака, определяющее источник события. Это значение должно соответствовать параметру шаблона nID, используемому в связанном базовом классе IDispEventSimpleImpl.

Iid
[in] IID, идентифицирующий интерфейс диспетчера.

piid
[in] Указатель на IID, определяющий интерфейс диспетчера.

Dispid
[in] DISPID, определяющий указанное событие.

Fn
[in] Имя функции обработчика событий. Эта функция должна использовать _stdcall соглашение о вызовах и иметь соответствующую подпись в стиле dispinterface.

info
[in] Введите сведения о функции обработчика событий. Эти сведения о типе предоставляются в виде указателя на структуру _ATL_FUNC_INFO . CC_CDECL является единственным вариантом, поддерживаемым в Windows CE для поля _ATL_FUNC_INFO CALLCONV структуры. Любое другое значение не поддерживается, поэтому его поведение не определено.

Замечания

Первые четыре параметра макроса совпадают с теми, которые используются для макроса SINK_ENTRY_EX . Окончательный параметр предоставляет сведения о типе события. Реализация CE ATL приемников событий ActiveX поддерживает только возвращаемые значения типа HRESULT или void из методов обработчика событий. Любое другое возвращаемое значение не поддерживается, и его поведение не определено.

См. также

Макросы
Глобальные функции составных элементов управления