CConnectionPoint

Die CConnectionPoint -Klasse definiert einen speziellen Typ von Schnittstelle für die Kommunikation mit anderen OLE-Objekte, genannt einen "Connection Point". Im Gegensatz zu normalen OLE-Schnittstellen, die zum Implementieren und die Funktionen eines OLE-Steuerelements verfügbar, implementiert einen Verbindungspunkt eine Ausgangsschnittstelle, die heißt fähig zu initiieren Aktionen auf anderen Objekten, wie z. B. das Auslösen von Ereignissen und Benachrichtigungen.

Eine Verbindung besteht aus zwei Teilen: das Objekt aufrufen der Schnittstelle, genannt die "Quelle", und das Objekt die Schnittstelle implementieren, genannt die "Senke". Durch das Offenlegen eines Verbindungspunkts, ermöglicht eine Quelle sinkt auf Verbindungen zu sich selbst herstellen. Durch den Verbindungspunktmechanismus erhält ein Source-Objekt einen Zeiger auf die Senkenimplementierung aus einer Reihe von Memberfunktionen. Beispielsweise kann zum Auslösen eines Ereignisses durch die Senke implementiert, die Quelle die entsprechende Methode der die Senkenimplementierung aufrufen.

In der Standardeinstellung eine COleControl-abgeleitete Klasse implementiert zwei Verbindungspunkte: für Ereignisse und Eigenschaft Änderungsbenachrichtigungen. Diese Verbindungen verwendet werden, bzw. für Ereignis auslösen und für die Mitteilung einer Senke (z. B. des Containers des Steuerelements) Wenn ein Eigenschaftenwert geändert hat. Für OLE-Steuerelementen zusätzliche Verbindungspunkte implementieren wird auch unterstützt. Für jede zusätzliche Verbindungspunkt implementiert in der Steuerelementklasse deklarieren Sie einen "Teil der Verbindung", der den Verbindungspunkt implementiert. Wenn Sie eine oder mehrere Verbindungspunkte implementieren, müssen Sie auch ein einzelnes "Verbindung anzeigen" in der Steuerelementklasse zu deklarieren.

Das folgende Beispiel veranschaulicht eine einfache Verbindungstabelle und einen Verbindungspunkt für die Sample OLE-Steuerelement, bestehend aus zwei Codefragmente: der erste Teil erklärt die Verbindungstabelle und Punkt; die zweite implementiert diese Karte und Point. Das erste Fragment wird in der Erklärung der Control-Klasse, unter dem geschützten Abschnitt eingefügt.

 &Nbsp;   / / Verbindung Punkt für ISample Schnittstelle
    BEGIN_CONNECTION_PART (CSampleCtrl, SampleConnPt)
        CONNECTION_IID(IID_ISampleSink)
    END_CONNECTION_PART(SampleConnPt)

DECLARE_CONNECTION_MAP()

Die Makros BEGIN_CONNECTION_PART und END_CONNECTION_PART deklariert eine Klasse eingebettete XSampleConnPt (abgeleitet von CConnectionPoint), die diesem bestimmten Verbindungspunkt implementiert. Wenn Sie CConnectionPoint -Memberfunktionen überschreiben oder eigene Memberfunktionen hinzufügen möchten, deklarieren sie zwischen diesen beiden Makros. Zum Beispiel überschreibt das CONNECTION_IID -Makro die CConnectionPoint::GetIID -Memberfunktion, wenn zwischen diesen beiden Makros platziert.

Im zweite Codefragment wird in der Implementierungsdatei eingefügt (.CPP) der Steuerelementklasse. Dieser Code implementiert die Verbindungstabelle, beinhaltet den zusätzliche Verbindungspunkt,SampleConnPt:

BEGI&N_CONNECTION_MAP (CSampleCtrl, COleControl)
 Nbsp;  CONNECTION_PART (SampleConnPt CSampleCtrl, IID_ISampleSink)
END_CONNECTION_MAP()

Sobald dieser Codefragmente eingefügt wurden, macht das Beispiel OLE-Steuerelement verfügbar einen Verbindungspunkt für die ISampleSink -Schnittstelle.

In der Regel unterstützen Verbindungspunkte "Multicasting"; die Fähigkeit, an mehrere Empfänger senden an dieselbe Schnittstelle angeschlossen. Das folgende Codefragment veranschaulicht das Multicasting zu erreichen durch Iteration über jeden Senke an einem Verbindungspunkt:

void CSampleCtrl::CallSinkFunc()
{
 Nbsp;  const CPtrArray * pConnections = m_xSampleConnPt.GetConnections();
    ASSERT (pConnections! = NULL);

Int cConnections = pConnections - > GetSize();
    ISampleSink * pSampleSink;
    für (Int I = 0; i < cConnections; i++)
    {
        pSampleSink = (ISampleSink *) (pConnections - > GetAt(i));
        ASSERT (pSampleSink! = NULL);
        pSampleSink - > SinkFunc();
    }
}

In diesem Beispiel werden den aktuellen Satz von Verbindungen auf die SampleConnPt Verbindungspunkt mit einem Aufruf von CConnectionPoint::GetConnections . Es durchläuft dann die Verbindungen und Anrufe ISampleSink::SinkFunc auf jede aktive Verbindung.

Weitere Informationen zur Verwendung von CConnectionPointfinden Sie im Artikel Verbindungspunkte im Visual C++ Programmer's Guide.

# include lt;afxctl.h>

Klassenmember |nbsp; Basisklasse | Hierarchiediagramm

Index