イベント処理インターフェイスの実装
更新 : 2007 年 11 月
ATL では、イベント処理に必要な 3 つの要素、つまりイベント インターフェイスの実装、イベント ソースのアドバイズ、イベント ソースのアドバイズ中止を行うことができます。必要となる正確な手順は、イベント インターフェイスの種類とアプリケーションのパフォーマンス要件によって異なります。
ATL を使用してインターフェイスを実装するときの最も一般的な方法は次のとおりです。
カスタム インターフェイスから直接派生させる方法。
IDispatchImpl から派生する方法。タイプ ライブラリにデュアル インターフェイス記述されている場合の方法です。
IDispEventImpl から派生する方法。タイプ ライブラリにディスパッチ インターフェイスが記述されている場合の方法です。
IDispEventSimpleImpl から派生する方法。タイプ ライブラリにディスパッチ インターフェイスが記述されていない場合、あるいは実行時に型情報を読み込まずに効率を上げる場合の方法です。
カスタム インターフェイスまたはデュアル インターフェイスを実装する場合は、AtlAdvise または CComPtrBase::Advise を呼び出してイベント ソースをアドバイズする必要があります。さらに、呼び出しから戻る Cookie を自分自身で追跡する必要があります。接続を切断するには、AtlUnadvise を呼び出します。
IDispEventImpl または IDispEventSimpleImpl を使用してディスパッチ インターフェイスを実装する場合は、IDispEventSimpleImpl::DispEventAdvise を呼び出してイベント ソースをアドバイズする必要があります。接続を切断するには、IDispEventSimpleImpl::DispEventUnadvise を呼び出します。
複合コントロールの基本クラスとして IDispEventImpl を使用する場合は、CComCompositeControl::AdviseSinkMap を使用すると、シンク マップに列挙されたイベント ソースのアドバイズとアドバイズ中止が自動的に行われます。
IDispEventImpl クラスと IDispEventSimpleImpl クラスを使用すると、Cookie を管理してくれます。