CConnectionPointクラスは特殊な「コネクション ポイント」と呼ばれる他の OLE オブジェクトと通信に使用されるインターフェイスを定義します実装し、OLE コントロールの機能を公開するために使用は、通常の OLE インターフェイスとは異なり、接続ポイントを実装や変更通知のイベントの発生など、その他のオブジェクトのアクションを開始することができるアウトゴーイング インターフェイス。
接続 2 つの部分で構成されます:「ソース」と、インターフェイスを実装するオブジェクトと呼ばれるインターフェイスを呼び出すオブジェクトには、「シンク」と呼ばれるコネクション ポイントを公開すると、ソース自体への接続を確立するためにシンクできます。コネクション ポイント機構を通じて、ソース オブジェクトは、シンクの実装の一連のメンバー関数へのポインターを取得します。たとえば、シンクが実装イベントを発生させるには、ソースはシンク実装の適切なメソッド呼び出すことができます。
既定では、 COleControl-派生クラスには 2 つのコネクション ポイントを実装する: 変更通知のイベントの 1 つとプロパティ 1 つ。これらの接続が使用され、それぞれ、イベントの発生と (たとえば、コントロールのコンテナーのシンクに通知、プロパティ値が変更されました。サポートは、また追加の接続ポイントを実装するには、OLE コントロールに表示されます。コントロール クラスで実装される各追加の接続ポイントを「接続ポイントを実装する、接続部」を宣言する必要があります。1 つまたは複数のコネクション ポイントを実装する場合は、また 1 つの「接続」クラスのマップ コントロールを宣言する必要があります。
簡単なコネクション マップとコネクション ポイントの例を示します、 Sample
OLE コントロール、コードの 2 つの断片を構成: 最初の部分は、コネクション マップとポイントを宣言、2 番目にこのマップとポイントを実装しています。保護されたセクションの下のコントロール クラスの宣言に最初のフラグメントが挿入されます。
特価;//接続ポイントの ISample インターフェイスBEGIN_CONNECTION_PART (CSampleCtrl, SampleConnPt)CONNECTION_IID(IID_ISampleSink)END_CONNECTION_PART(SampleConnPt)DECLARE_CONNECTION_MAP()(&N)
BEGIN_CONNECTION_PARTとEND_CONNECTION_PARTのマクロは、埋め込みクラス宣言 XSampleConnPt
( CConnectionPointから派生) は、この特定のコネクション ポイントを実装します。任意CConnectionPointメンバー関数をオーバーライドまたはあなた自身のメンバー関数を追加するには、これら 2 つのマクロの間を宣言します。たとえば、これら 2 つのマクロの間に配置すると、 CConnectionPoint::GetIIDメンバー関数、 CONNECTION_IIDマクロをオーバーライドします。
2 番目のコード フラグメントは、実装ファイルに挿入されます (。CPP)、コントロール クラスの。このコードでは、追加の接続ポイントが含まれています、接続マップを実装し、SampleConnPt
:
BEGIN_CONNECTION_MAP (CSampleCtrl、COleControl)特価;CONNECTION_PART (CSampleCtrl、IID_ISampleSink、SampleConnPt)END_CONNECTION_MAP()(&N)
これらのコードを挿入すると、サンプルの OLE コントロールのコネクション ポイントは、 ISampleSinkインターフェイスを公開します。
通常、接続ポイントを「マルチキャスト」; サポート複数のシンクにブロードキャストする機能は、同じインターフェイスに接続。次のコードはコネクション ポイント上のシンクごとの反復によってマルチキャストを実現する方法を示します:
void CSampleCtrl::CallSinkFunc(){特価;const CPtrArray ※ pConnections = m_xSampleConnPt.GetConnections();ASSERT (pConnections! = NULL);int cConnections = pConnections - > GetSize();ISampleSink ※ pSampleSink;(int I = 0; 私は < cConnections; i + +){pSampleSink = (ISampleSink ※) (pConnections - > GetAt(i));ASSERT (pSampleSink! = NULL);pSampleSink - > SinkFunc();}}
この例での接続の現在のセットを取得します、 SampleConnPt
接続ポイントへの呼び出しを CConnectionPoint::GetConnections
。呼び出しと接続を繰り返しして ISampleSink::SinkFunc
にすべてのアクティブな接続。
CConnectionPointを使用しての詳細については、参照してください 接続ポイントでVisual の C++ プログラマのガイド。
#include lt;afxctl.h>