处理摘要的ATL事件
通常,处理COM事件是一个相对简单的过程。 有三个主要步骤:
实现对象的事件接口。
建议事件源您的对象要接收事件。
Unadvise事件源,当对象不再需要接收事件。
实现接口
使用ATL实现接口,有四种主要方式。
从 派生 |
适用于接口类型 |
需要实现所有methods* |
需要类型库在运行时 |
---|---|---|---|
接口 |
Vtable |
是 |
否 |
双重 |
是 |
是 |
|
调度接口 |
否 |
是 |
|
调度接口 |
否 |
否 |
*在使用ATL时支持选件类,不需要手动执行 IUnknown 或 IDispatch 方法。
建议和Unadvising事件源
使用ATL,建议和unadvising事件源三种主要方式。
建议功能 |
Unadvise功能 |
适用于 |
要求您记录cookie? |
注释 |
---|---|---|---|---|
Vtable或双重接口 |
是 |
AtlAdvise 是全局ATL功能。 CComPtr 和 CComQIPtr使用CComPtrBase::Advise。 |
||
否 |
较少形参比 AtlAdvise,因为基类完成更多工作。 |
|||
在复合控件的ActiveX控件 |
否 |
CComCompositeControl::AdviseSinkMap 建议在事件接收器映射的所有项。 功能相同unadvises项。 此方法由 CComCompositeControl 选件类自动调用。 |
||
在对话框的ActiveX控件 |
否 |
CAxDialogImpl::AdviseSinkMap 建议和unadvises在对话框资源的所有ActiveX控件。 这对于自动执行。 |