共用方式為


ATL 事件處理摘要

一般而言,處理 COM 事件是相對簡單的程式。 有三個主要步驟:

  • 在您的對象上實作事件介面。

  • 建議您的物件想要接收事件的事件來源。

  • 當您的物件不再需要接收事件時,請取消加入事件來源。

實作介面

使用 ATL 實作介面有四種主要方式。

衍生 適用於介面類型 需要您實作所有方法* 運行時間需要類型庫
介面 Vtable No
IDispatchImpl 雙重 Yes Yes
IDispEventImpl 分配介面 No Yes
IDispEventSimpleImpl 分配介面 No No

* 使用 ATL 支援類別時,您永遠不需要手動實 IUnknown 作 或 IDispatch 方法。

建議和取消通知事件來源

有三個主要方式可使用 ATL 來建議和取消通知事件來源。

建議函式 Unadvise 函式 最適合搭配使用 要求您追蹤 Cookie 註解
AtlAdviseCComPtrBase::建議 AtlUnadvise Vtable 或雙重介面 Yes AtlAdvise 是全域 ATL 函式。 CComPtrBase::AdviseCComPtrCComQIPtr 使用。
IDispEventSimpleImpl::D ispEventAdvise IDispEventSimpleImpl::D ispEventUnadvise IDispEventImplIDispEventSimpleImpl No AtlAdvise 基類執行更多工作以來的參數少。
CComCompositeControl::AdviseSinkMap(TRUE) CComCompositeControl::AdviseSinkMap(FALSE) 複合控件中的 ActiveX 控制件 No CComCompositeControl::AdviseSinkMap 建議事件接收對應中的所有專案。 相同的函式會取消記錄專案。 這個方法是由 CComCompositeControl 類別自動呼叫。
CAxDialogImpl::AdviseSinkMap(TRUE) CAxDialogImpl::AdviseSinkMap(FALSE) 對話框中的ActiveX控制件 No CAxDialogImpl::AdviseSinkMap 建議和取消設定對話資源中的所有 ActiveX 控制件。 這會自動為您完成。

另請參閱

事件處理
支援 IDispEventImpl