处理摘要的ATL事件

通常,处理COM事件是一个相对简单的过程。有三个主要步骤:

  • 实现对象的事件接口。

  • 建议事件源您的对象要接收事件。

  • Unadvise事件源,当对象不再需要接收事件。

实现接口

使用ATL实现接口,有四种主要方式。

从 派生

适用于接口类型

需要实现所有methods*

需要类型库在运行时

接口

Vtable

IDispatchImpl

双重

IDispEventImpl

调度接口

IDispEventSimpleImpl

调度接口

*在使用ATL时支持选件类,不需要手动执行 IUnknownIDispatch 方法。

建议和Unadvising事件源

使用ATL,建议和unadvising事件源三种主要方式。

建议功能

Unadvise功能

适用于

要求您记录cookie?

注释

AtlAdviseCComPtrBase::Advise

AtlUnadvise

Vtable或双重接口

AtlAdvise 是全局ATL功能。CComPtrCComQIPtr使用CComPtrBase::Advise

IDispEventSimpleImpl::DispEventAdvise

IDispEventSimpleImpl::DispEventUnadvise

IDispEventImplIDispEventSimpleImpl

较少形参比 AtlAdvise,因为基类完成更多工作。

CComCompositeControl::AdviseSinkMap (TRUE)

CComCompositeControl::AdviseSinkMap (FALSE)

在复合控件的ActiveX控件

CComCompositeControl::AdviseSinkMap 建议在事件接收器映射的所有项。功能相同unadvises项。此方法由 CComCompositeControl 选件类自动调用。

CAxDialogImpl::AdviseSinkMap (TRUE)

CAxDialogImpl::AdviseSinkMap (FALSE)

在对话框的ActiveX控件

CAxDialogImpl::AdviseSinkMap 建议和unadvises在对话框资源的所有ActiveX控件。这对于自动执行。

请参见

概念

事件处理和ATL

支持IDispEventImpl