イベント処理の原則
すべてのイベントの処理に共通 3 ステップがあります。:必要です。
では、オブジェクトのイベント インターフェイスを実装します。
、オブジェクトがイベントを受信するイベント ソースに指示します。
、のオブジェクトが、イベントを受信する必要がない場合に Unadvise イベント ソース。
ユーザーがイベントのインターフェイスを実装する方法は、型によって異なります。イベントのインターフェイスは、vtable、デュアル、ディスパッチ インターフェイスまたはのいずれかになります。また、インターフェイスを定義するイベントのソースまで、デザイナー; これには、インターフェイスを実装するまで、あります。
[!メモ]
イベントのインターフェイスがデュアルである必要があり、技術的な理由がないと使用を避けるの一部の適切なデザイン理由は、倍になりますあります。ただし、これは、イベント ソースのデザイナー/実装によって行われる意思決定です。イベント sinkの観点から作業しているため、考慮することを選択できない可能性があるイベント インターフェイスをデュアル必要がありますが、無効を実装する。デュアル インターフェイスの詳細については、デュアル インターフェイスと ATLを参照してください。
イベント ソースに指示することは 3 ステップ分割することがあります:
IConnectionPointContainerのソース オブジェクトを照会します。
目的のイベント インターフェイスの IID を渡す呼び出し IConnectionPointContainer::FindConnectionPoint。成功すると、これはコネクション ポイント オブジェクトの IConnectionPoint のインターフェイスを返します。
イベント シンク IUnknown を渡す呼び出し IConnectionPoint::Advise。成功すると、これは接続を表す DWORD のクッキーを返します。
正常にイベントの受信の対象を登録した場合は、オブジェクトのイベント インターフェイスのメソッドは、イベントに従ってソース オブジェクトから発生すると呼び出されます。はイベントを受け取る必要がない場合 IConnectionPoint::Unadviseによってコネクション ポイントに、クッキーを渡すことができます。これは、シンク ソースとの間の接続を解除。
イベントを処理するときに循環参照が発生しないように注意してください。