过程原则的事件
有三个步骤共有的所有事件处理。 您需要:
实现对象的事件接口。
建议事件源您的对象要接收事件。
Unadvise事件源,当对象不再需要接收事件。
您将实现接口的方法取决于其类型。 事件接口可以是vtable,、或调度接口。 将由定义的接口事件源的设计器;将由实现该接口的。
备注
虽然在技术上的原因事件接口不能是双的,有多种虚拟设计原因避免使用双绑定。但是,这种 事件源的设计器/实现所做的决策。因为您从活动 sink的角度工作,您需要允许这种可能性您可能没有任何选择,但实现一个双事件接口。有关双重接口的更多信息,请参见 双重接口和ATL。
建议事件源可以分解为三个步骤:
查询 IConnectionPointContainer的源对象。
调用通过感兴趣事件接口的IID的 IConnectionPointContainer::FindConnectionPoint。 如果成功,则将返回在的 IConnectionPoint 接口的连接点对象。
该调用会将事件接收器的 IUnknown 的 IConnectionPoint::Advise。 如果成功,则将返回表示连接的 DWORD cookie。
一旦在接收事件上成功注册了感兴趣,在对象的事件接口的方法根据操作将调用激发的源对象。 当不再需要接收事件时,可以通过cookie回通过 IConnectionPoint::Unadvise连接点。 否则会中断连接在源和事件之间。
在处理事件时,请注意避免循环引用。