次の方法で共有


ATL のイベント処理の概要

一般に、COM イベントを処理するのは比較的簡単です。3 種類の主要な手順があります:

  • では、オブジェクトのイベント インターフェイスを実装します。

  • 、オブジェクトがイベントを受信するイベント ソースに指示します。

  • 、のオブジェクトが、イベントを受信する必要がない場合に Unadvise イベント ソース。

インターフェイスの実装

ATL を使用してインターフェイスを実装する 4 主に二つの方法があります。

から派生させる。

インターフェイスの種類に適した

すべての methods* を実装する必要があります。

実行時にタイプ ライブラリが必要です

インターフェイス

Vtable

はい

いいえ

IDispatchImpl

Dual

はい

はい

IDispEventImpl

ディスパッチ インターフェイス

いいえ

はい

IDispEventSimpleImpl

ディスパッチ インターフェイス

いいえ

いいえ

* ATL のサポート クラスを使用すると、は IUnknown または IDispatch のメソッドを手動で実装する必要はありません。

アドバイズ イベント ソースと Unadvising

ATL を使用してイベント ソースに指示すると unadvising 3 主に二つの方法があります。

関数に指示します。

Unadvise 関数

使用するように最も適した

クッキーを追跡するために必要ですか。

コメント

AtlAdviseCComPtrBase::Advise

AtlUnadvise

Vtable またはデュアル インターフェイス

はい

AtlAdvise は、グローバル ATL 関数です。CComPtrBase::AdviseCComPtrCComQIPtrによって使用されます。

IDispEventSimpleImpl::DispEventAdvise

IDispEventSimpleImpl::DispEventUnadvise

IDispEventImplIDispEventSimpleImpl

いいえ

基本クラスは、より多くの作業を行うため AtlAdvise ほどのパラメーター。

CComCompositeControl::AdviseSinkMap (true)

CComCompositeControl::AdviseSinkMap (False)

複合コントロールの ActiveX コントロール

いいえ

CComCompositeControl::AdviseSinkMap は、イベント シンク マップのすべてのエントリに指示されます。同じ関数のエントリ unadvises。このメソッドは CComCompositeControl のクラスによって自動的に呼び出されます。

CAxDialogImpl::AdviseSinkMap (true)

CAxDialogImpl::AdviseSinkMap (False)

ダイアログ ボックスの ActiveX コントロール

いいえ

CAxDialogImpl::AdviseSinkMap は unadvises ダイアログ リソースのすべての ActiveX コントロールをお勧めします。この設定は自動的に行われます。

参照

概念

イベント処理と ATL

IDispEventImpl のサポート