ATL 事件處理摘要
一般而言,處理 COM 事件是相對簡單的程式。 有三個主要步驟:
在您的對象上實作事件介面。
建議您的物件想要接收事件的事件來源。
當您的物件不再需要接收事件時,請取消加入事件來源。
實作介面
使用 ATL 實作介面有四種主要方式。
衍生 | 適用於介面類型 | 需要您實作所有方法* | 運行時間需要類型庫 |
---|---|---|---|
介面 | Vtable | 是 | No |
IDispatchImpl | 雙重 | Yes | Yes |
IDispEventImpl | 分配介面 | No | Yes |
IDispEventSimpleImpl | 分配介面 | No | No |
* 使用 ATL 支援類別時,您永遠不需要手動實 IUnknown
作 或 IDispatch
方法。
建議和取消通知事件來源
有三個主要方式可使用 ATL 來建議和取消通知事件來源。
建議函式 | Unadvise 函式 | 最適合搭配使用 | 要求您追蹤 Cookie | 註解 |
---|---|---|---|---|
AtlAdvise, CComPtrBase::建議 | AtlUnadvise | Vtable 或雙重介面 | Yes | AtlAdvise 是全域 ATL 函式。 CComPtrBase::Advise 由 CComPtr 和 CComQIPtr 使用。 |
IDispEventSimpleImpl::D ispEventAdvise | IDispEventSimpleImpl::D ispEventUnadvise | IDispEventImpl 或 IDispEventSimpleImpl | No | 比 AtlAdvise 基類執行更多工作以來的參數少。 |
CComCompositeControl::AdviseSinkMap(TRUE) | CComCompositeControl::AdviseSinkMap(FALSE) | 複合控件中的 ActiveX 控制件 | No | CComCompositeControl::AdviseSinkMap 建議事件接收對應中的所有專案。 相同的函式會取消記錄專案。 這個方法是由 CComCompositeControl 類別自動呼叫。 |
CAxDialogImpl::AdviseSinkMap(TRUE) | CAxDialogImpl::AdviseSinkMap(FALSE) | 對話框中的ActiveX控制件 | No | CAxDialogImpl::AdviseSinkMap 建議和取消設定對話資源中的所有 ActiveX 控制件。 這會自動為您完成。 |