CConnectionPoint クラス
他の OLE オブジェクトと通信するために使われる "コネクション ポイント" と呼ばれる特別な型のインターフェイスを定義します。
class CConnectionPoint : public CCmdTarget
メンバー
パブリック コンストラクター
名前 |
説明 |
---|---|
CConnectionPoint オブジェクトを構築します。 |
パブリック メソッド
名前 |
説明 |
---|---|
コネクション マップのすべてのコネクション ポイントを取得します。 |
|
コネクション マップを所有するコントロールのコンテナーを取得します。 |
|
コネクション ポイント インターフェイスの ID を取得します。 |
|
コントロールでサポートされているコネクション ポイントの最大数を取得します。 |
|
posで接続要素へのポインターを取得します。 |
|
GetNextConnection の呼び出しに渡すことができる POSITION の値を返すことでマップのイテレーションを開始します。 |
|
接続を確立するか、または中断するときに、フレームワークによって呼び出されます。 |
|
要求されたシンク インターフェイスへのポインターを取得します。 |
解説
OLE コントロール、コネクション ポイントの実装の機能を実装し、公開するためにイベントおよびデリゲートの変更の通知など他のオブジェクトのアクションを開始、アウトゴーイング インターフェイス使用される通常の OLE インターフェイスとは異なり。
接続は 2 人の部分から構成されます: 「」、ソース インターフェイスとインターフェイスを実装するオブジェクトと呼ばれるインターフェイスを呼び出すオブジェクトは、「シンクを呼び出します」。コネクション ポイントを公開することで、ソースはシンクがそれ自体への接続を確立するようにします。コネクション ポイント機構を通じて、ソース オブジェクトはシンクの一連のメンバー関数の実装へのポインターを取得します。たとえば、シンクによって実装されたイベントを発生させるソースはシンクの実装のメソッドを呼び出すことができます。
既定では、COleControl派生クラスは 2 種類のコネクション ポイントを実装します: イベントの 1 とプロパティの変更通知の場合は 1。これらの接続はそれぞれ、イベントの発生にシンクと (たとえば、コントロールのコンテナー) を通知するためにプロパティ値が変更された場合は、が使用されます。サポートは、実装の追加のコネクション ポイントに OLE コントロールが提供されます。コントロールのクラスで実装されるする追加のコネクション ポイント用に実装するコネクション ポイント「パーツ」その接続を宣言する必要があります。一つ以上のコネクション ポイントを実装する場合、コントロール クラスの一つの「接続」マップを宣言する必要があります。
次の例では、コードの 2 種類のフラグメントで構成される Sample の OLE コントロールの単純なコネクション マップを 1 つのコネクション ポイントを示します: 最初の部分では、コネクション マップと位置を宣言します; 2 番目のマップとはこのポイントを実装します。最初の例では protected のセクションのコントロールのクラス宣言に、挿入:
// Connection point for ISample interface
BEGIN_CONNECTION_PART(CMyClass, SampleConnPt)
CONNECTION_IID(IID_ISampleSink)
END_CONNECTION_PART(SampleConnPt)
DECLARE_CONNECTION_MAP()
BEGIN_CONNECTION_PART と END_CONNECTION_PART のマクロは、埋め込みクラス、その XSampleConnPt (から派生) を実装 CConnectionPointこの特定のコネクション ポイント宣言します。CConnectionPoint のメンバー関数をオーバーライドする場合、または独自のメンバー関数を追加すると、この二つのマクロの中で宣言します。たとえば、CONNECTION_IID のマクロは、この二つのマクロの間にある場合 CConnectionPoint::GetIID のメンバー関数をオーバーライドします。
2 番目のコード例では、コントロール クラスの実装ファイル (.cpp) に挿入されます。このコードは、追加のコネクション ポイントを含むコネクション マップ、SampleConnPt実行します:
BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()
これらのサンプル コードに挿入し、OLE コントロールは ISampleSink のインターフェイス用のコネクション ポイントを公開します。
通常、コネクション ポイントは、同じインターフェイスに接続される複数のシンクにブロードキャスト機能である「マルチキャスティング」をサポートしています。次のコードでは、コネクション ポイントの各シンクを反復処理して、マルチキャスティングを実行する方法を示します:
void CMyClass::CallSinkFunc()
{
POSITION pos = m_xSampleConnPt.GetStartPosition();
ISampleSink* pSampleSink;
while( pos != NULL )
{
pSampleSink = (ISampleSink*)(m_xSampleConnPt.GetNextConnection(pos));
if(pSampleSink != NULL)
pSampleSink->SinkFunc();
}
}
この例では CConnectionPoint::GetConnectionsへの呼び出しで SampleConnPt のコネクション ポイントの接続の現在のセットを取得します。これは、接続を介しておよび反復処理し、どのアクティブな接続の ISampleSink::SinkFunc を呼び出します。
CConnectionPointの使用の詳細については、" " [接続ポイント]を参照してください。
継承階層
CConnectionPoint
必要条件
ヘッダー : afxdisp.h