复合控件宏
这些宏定义事件接收器映射和条目。
宏 | 说明 |
---|---|
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 | 事件接收器映射的条目,其中包含与 IDispEventSimpleImpl 一起使用的手动提供的类型信息。 |
SINK_ENTRY_INFO_P | (Visual Studio 2017) 类似于 SINK_ENTRY_INFO,但它采用指向 iid 的指针。 |
要求
标头:atlcom.h
BEGIN_SINK_MAP
声明复合控件的事件接收器映射的开头。
BEGIN_SINK_MAP(_class)
参数
_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()
备注
ActiveX 事件接收器的 CE ATL 实现仅支持从事件处理程序方法返回 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()
备注
ActiveX 事件接收器的 CE ATL 实现仅支持从事件处理程序方法返回 HRESULT 或 void 类型的返回值。 任何其他返回值都不受支持,其行为未定义。
SINK_ENTRY
声明由 id 标识的控件的指定事件 (dispid) 的处理程序函数 (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()
备注
ActiveX 事件接收器的 CE ATL 实现仅支持从事件处理程序方法返回 HRESULT 或 void 类型的返回值。 任何其他返回值都不受支持,其行为未定义。
SINK_ENTRY_EX 和 SINK_ENTRY_EX_P
声明由 id 标识的控件的调度接口 (iid) 的指定事件 (dispid) 的处理程序函数 (fn)。
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()
备注
ActiveX 事件接收器的 CE ATL 实现仅支持从事件处理程序方法返回 HRESULT 或 void 类型的返回值。 任何其他返回值都不受支持,其行为未定义。
SINK_ENTRY_INFO 和 SINK_ENTRY_INFO_P
在事件接收器映射内使用 SINK_ENTRY_INFO 宏来提供 IDispEventSimpleImpl 将事件路由到相关处理程序函数所需的信息。
SINK_ENTRY_INFO( id, iid, dispid, fn, info )
SINK_ENTRY_INFO_P( id, piid, dispid, fn, info ) // (Visual Studio 2017)
参数
id
[in] 标识事件源的无符号整数。 此值必须与相关 IDispEventSimpleImpl 基类中使用的 nID 模板参数匹配。
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 宏的参数相同。 最后一个参数提供事件的类型信息。 ActiveX 事件接收器的 CE ATL 实现仅支持从事件处理程序方法返回 HRESULT 或 void 类型的返回值。 任何其他返回值都不受支持,其行为未定义。