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