處理事件的 ATL 摘要
一般而言,處理 COM 事件是相當簡單的程序。 有三個主要步驟:
實作在物件的事件介面。
建議您事件來源的物件要接收事件。
Unadvise 事件來源,當您的物件不再需要接收事件。
實作介面
使用 ATL 實作介面,有四種主要方式。
衍生自 |
適用於介面型別 |
您必須實作所有 methods* |
需要型別程式庫在執行階段 |
---|---|---|---|
介面 |
Vtable |
是 |
否 |
雙重 |
是 |
是 |
|
分配介面 |
否 |
是 |
|
分配介面 |
否 |
否 |
*在使用 ATL 支援類別中的時,就不需要手動執行 IUnknown 或 IDispatch 方法。
建議和 Unadvising 事件來源
使用 ATL,會通知和 unadvising 事件來源三種主要方式。
告知函式 |
Unadvise 函式 |
適用。 |
要求您記錄 Cookie? |
註解 |
---|---|---|---|---|
Vtable 或雙重介面 |
是 |
AtlAdvise 是全域 ATL 函式。 CComPtr 和 CComQIPtr使用CComPtrBase::Advise 。 |
||
否 |
少數參數小於 AtlAdvise ,因為基底類別完成更多工作。 |
|||
在複合控制項的 ActiveX 控制項 |
否 |
CComCompositeControl::AdviseSinkMap 建議在事件接收對應中的所有項目。 相同的函式 unadvises 輸入。 這個方法是由 CComCompositeControl 類別自動呼叫。 |
||
在 對話方塊中的 ActiveX 控制項 |
否 |
在CAxDialogImpl::AdviseSinkMap 對話方塊資源建議和 unadvises 所有 ActiveX 控制項。 這會自動進行。 |