ATL のイベント処理の概要
一般に、COM イベントを処理するのは比較的簡単です。3 種類の主要な手順があります:
では、オブジェクトのイベント インターフェイスを実装します。
、オブジェクトがイベントを受信するイベント ソースに指示します。
、のオブジェクトが、イベントを受信する必要がない場合に Unadvise イベント ソース。
インターフェイスの実装
ATL を使用してインターフェイスを実装する 4 主に二つの方法があります。
から派生させる。 |
インターフェイスの種類に適した |
すべての methods* を実装する必要があります。 |
実行時にタイプ ライブラリが必要です |
---|---|---|---|
インターフェイス |
Vtable |
はい |
いいえ |
Dual |
はい |
はい |
|
ディスパッチ インターフェイス |
いいえ |
はい |
|
ディスパッチ インターフェイス |
いいえ |
いいえ |
* ATL のサポート クラスを使用すると、は IUnknown または IDispatch のメソッドを手動で実装する必要はありません。
アドバイズ イベント ソースと Unadvising
ATL を使用してイベント ソースに指示すると unadvising 3 主に二つの方法があります。
関数に指示します。 |
Unadvise 関数 |
使用するように最も適した |
クッキーを追跡するために必要ですか。 |
コメント |
---|---|---|---|---|
Vtable またはデュアル インターフェイス |
はい |
AtlAdvise は、グローバル ATL 関数です。CComPtrBase::Advise は CComPtr と CComQIPtrによって使用されます。 |
||
いいえ |
基本クラスは、より多くの作業を行うため AtlAdvise ほどのパラメーター。 |
|||
複合コントロールの ActiveX コントロール |
いいえ |
CComCompositeControl::AdviseSinkMap は、イベント シンク マップのすべてのエントリに指示されます。同じ関数のエントリ unadvises。このメソッドは CComCompositeControl のクラスによって自動的に呼び出されます。 |
||
ダイアログ ボックスの ActiveX コントロール |
いいえ |
CAxDialogImpl::AdviseSinkMap は unadvises ダイアログ リソースのすべての ActiveX コントロールをお勧めします。この設定は自動的に行われます。 |