ATL 事件处理摘要

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

  • 在对象上实现事件接口。

  • 当对象想要接收事件时,推荐事件源。

  • 当对象不再需要接收事件时取消推荐事件源。

实现接口

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

派生自 适用于接口类型 要求实现所有方法* 运行时需要类型库
接口 Vtable
IDispatchImpl
IDispEventImpl 调度接口
IDispEventSimpleImpl 调度接口

*使用 ATL 支持类时,无需手动实现 IUnknownIDispatch 方法。

通知和取消通知事件源

可通过三种主要方式使用 ATL 来通知和取消通知事件源。

通知函数 取消通知函数 最适合用于 要求跟踪 Cookie 注释
AtlAdviseCComPtrBase::Advise AtlUnadvise Vtable 或双接口 AtlAdvise 是全局 ATL 函数。 CComPtrBase::AdviseCComPtrCComQIPtr 使用。
IDispEventSimpleImpl::DispEventAdvise IDispEventSimpleImpl::DispEventUnadvise IDispEventImplIDispEventSimpleImpl 自基类执行更多工作以来,参数比 AtlAdvise 更少。
CComCompositeControl::AdviseSinkMap(TRUE) CComCompositeControl::AdviseSinkMap(FALSE) 复合控件中的 ActiveX 控件 CComCompositeControl::AdviseSinkMap 会通知事件接收器映射中的所有条目。 同一个函数将取消通知条目。 此方法由 CComCompositeControl 类自动调用。
CAxDialogImpl::AdviseSinkMap(TRUE) CAxDialogImpl::AdviseSinkMap(FALSE) 对话框中的 ActiveX 控件 CAxDialogImpl::AdviseSinkMap 通知并取消通知对话资源中的所有 ActiveX 控件。 系统会自动完成。

另请参阅

事件处理
支持 IDispEventImpl