Share via


CConnectionPoint-klasse

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Definieert een speciaal type interface dat wordt gebruikt om te communiceren met andere OLE-objecten, een verbindingspunt genoemd.

Syntaxis

class CConnectionPoint : public CCmdTarget

Leden

Openbare constructors

Naam Description
CConnectionPoint::CConnectionPoint Maakt een CConnectionPoint object.

Openbare methoden

Naam Description
CConnectionPoint::GetConnections Hiermee worden alle verbindingspunten in een verbindingsoverzicht opgehaald.
CConnectionPoint::GetContainer Haalt de container op van het besturingselement dat eigenaar is van de verbindingstoewijzing.
CConnectionPoint::GetIID Haalt de interface-id van een verbindingspunt op.
CConnectionPoint::GetMaxConnections Hiermee haalt u het maximum aantal verbindingspunten op dat wordt ondersteund door een besturingselement.
CConnectionPoint::GetNextConnection Hiermee wordt een aanwijzer opgehaald naar het verbindingselement op pos.
CConnectionPoint::GetStartPosition Hiermee start u een toewijzingsiteratie door een POSITION-waarde te retourneren die kan worden doorgegeven aan een GetNextConnection aanroep.
CConnectionPoint::OnAdvise Aangeroepen door het framework bij het tot stand brengen of verbreken van verbindingen.
CConnectionPoint::QuerySinkInterface Hiermee wordt een aanwijzer opgehaald naar de aangevraagde sink-interface.

Opmerkingen

In tegenstelling tot normale OLE-interfaces, die worden gebruikt om de functionaliteit van een OLE-besturingselement te implementeren en beschikbaar te maken, implementeert een verbindingspunt een uitgaande interface die acties op andere objecten kan initiëren, zoals het activeren van gebeurtenissen en wijzigingsmeldingen.

Een verbinding bestaat uit twee delen: het object dat de interface aanroept, de 'bron' genoemd, en het object dat de interface implementeert, de 'sink'. Door een verbindingspunt weer te geven, kan een bron sinks verbindingen met zichzelf tot stand brengen. Via het verbindingspuntmechanisme verkrijgt een bronobject een aanwijzer naar de implementatie van een set lidfuncties van de sink. Als u bijvoorbeeld een gebeurtenis wilt activeren die door de sink is geïmplementeerd, kan de bron de juiste methode van de implementatie van de sink aanroepen.

Standaard implementeert een COleControl-afgeleide klasse twee verbindingspunten: één voor gebeurtenissen en één voor wijzigingsmeldingen voor eigenschappen. Deze verbindingen worden respectievelijk gebruikt voor het activeren van gebeurtenissen en voor het melden van een sink (bijvoorbeeld de container van het besturingselement) wanneer een eigenschapswaarde is gewijzigd. Er wordt ook ondersteuning geboden voor OLE-besturingselementen voor het implementeren van extra verbindingspunten. Voor elk extra verbindingspunt dat in uw besturingsklasse is geïmplementeerd, moet u een 'verbindingsonderdeel' declareren waarmee het verbindingspunt wordt geïmplementeerd. Als u een of meer verbindingspunten implementeert, moet u ook één verbindingstoewijzing declareren in uw besturingsklasse.

In het volgende voorbeeld ziet u een eenvoudige verbindingstoewijzing en één verbindingspunt voor het Sample OLE-besturingselement, bestaande uit twee codefragmenten: het eerste gedeelte declareert de verbindingstoewijzing en het eerste punt; de tweede implementeert deze kaart en dit punt. Het eerste fragment wordt ingevoegd in de declaratie van de besturingsklasse, onder de protected sectie:

// Connection point for ISample interface
BEGIN_CONNECTION_PART(CMyClass, SampleConnPt)
CONNECTION_IID(IID_ISampleSink)
END_CONNECTION_PART(SampleConnPt)

DECLARE_CONNECTION_MAP()

De BEGIN_CONNECTION_PART- en END_CONNECTION_PART-macro's declareren een ingesloten klasse ( XSampleConnPt afgeleid van CConnectionPoint) waarmee dit specifieke verbindingspunt wordt geïmplementeerd. Als u lidfuncties wilt overschrijven CConnectionPoint of lidfuncties van uw eigen functie wilt toevoegen, declareert u deze tussen deze twee macro's. De CONNECTION_IID macro overschrijft bijvoorbeeld de CConnectionPoint::GetIID lidfunctie wanneer deze tussen deze twee macro's wordt geplaatst.

Het tweede codefragment wordt ingevoegd in het implementatiebestand (. CPP) van uw controleklasse. Met deze code wordt de verbindingstoewijzing geïmplementeerd, die het extra verbindingspunt bevat, SampleConnPt:

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
   CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

Zodra deze codefragmenten zijn ingevoegd, wordt in het OLE-voorbeeld-besturingselement een verbindingspunt voor de ISampleSink interface weergegeven.

Verbindingspunten ondersteunen doorgaans 'multicasting', wat de mogelijkheid is om te uitzenden naar meerdere sinks die zijn verbonden met dezelfde interface. In het volgende codefragment ziet u hoe u multicasting kunt uitvoeren door elke sink op een verbindingspunt te doorlopen:

void CMyClass::CallSinkFunc()
{
   POSITION pos = m_xSampleConnPt.GetStartPosition();
   ISampleSink *pSampleSink;
   while (pos != NULL)
   {
      pSampleSink = (ISampleSink *)(m_xSampleConnPt.GetNextConnection(pos));
      if (pSampleSink != NULL)
      {
         pSampleSink->SinkFunc();
      }
   }
}

In dit voorbeeld wordt de huidige set verbindingen op het SampleConnPt verbindingspunt opgehaald met een aanroep naar CConnectionPoint::GetConnections. Vervolgens worden de verbindingen herhaald en wordt elke actieve verbinding aanroepen ISampleSink::SinkFunc .

Zie het artikel Verbindingspunten voor meer informatie over het gebruikCConnectionPoint.

Overnamehiërarchie

CObject

CCmdTarget

CConnectionPoint

Requirements

Koptekst: afxdisp.h

CConnectionPoint::CConnectionPoint

Maakt een CConnectionPoint object.

CConnectionPoint();

CConnectionPoint::GetConnections

Roep deze functie aan om alle actieve verbindingen voor een verbindingspunt op te halen.

const CPtrArray* GetConnections();

Retourwaarde

Een aanwijzer naar een matrix met actieve verbindingen (sinks). Sommige van de aanwijzers in de matrix kunnen NULL zijn. Elke niet-NULL-aanwijzer in deze matrix kan veilig worden geconverteerd naar een aanwijzer naar de sink-interface met behulp van een cast-operator.

CConnectionPoint::GetContainer

Aangeroepen door het framework om het IConnectionPointContainer voor het verbindingspunt op te halen.

virtual LPCONNECTIONPOINTCONTAINER GetContainer();

Retourwaarde

Als dit lukt, wijst u een aanwijzer naar de container; anders NULL.

Opmerkingen

Deze functie wordt doorgaans geïmplementeerd door de BEGIN_CONNECTION_PART macro.

CConnectionPoint::GetIID

Aangeroepen door het framework om de interface-id van een verbindingspunt op te halen.

virtual REFIID GetIID() = 0;

Retourwaarde

Een verwijzing naar de interface-id van het verbindingspunt.

Opmerkingen

Overschrijf deze functie om de interface-id voor dit verbindingspunt te retourneren.

CConnectionPoint::GetMaxConnections

Wordt aangeroepen door het framework om het maximum aantal verbindingen op te halen dat wordt ondersteund door het verbindingspunt.

virtual int GetMaxConnections();

Retourwaarde

Het maximum aantal verbindingen dat wordt ondersteund door het besturingselement of -1 als er geen limiet is.

Opmerkingen

De standaard implementatie retourneert -1, wat aangeeft dat er geen limiet is.

Overschrijf deze functie als u het aantal sinks wilt beperken dat verbinding kan maken met uw besturingselement.

CConnectionPoint::GetNextConnection

Hiermee wordt een aanwijzer opgehaald naar het verbindingselement op pos.

LPUNKNOWN GetNextConnection(POSITION& pos) const;

Parameterwaarden

pos
Hiermee geeft u een verwijzing naar een POSITION-waarde die wordt geretourneerd door een vorige GetNextConnection of GetStartPosition-aanroep .

Retourwaarde

Een aanwijzer naar het verbindingselement dat is opgegeven door pos of NULL.

Opmerkingen

Deze functie is het handigst voor het herhalen van alle elementen in de verbindingstoewijzing. Sla bij het herhalen eventuele NULL's die door deze functie worden geretourneerd, over.

Example

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::GetStartPosition

Hiermee start u een toewijzingsiteratie door een POSITION-waarde te retourneren die kan worden doorgegeven aan een GetNextConnection-aanroep .

POSITION GetStartPosition() const;

Retourwaarde

Een POSITION-waarde die een beginpositie aangeeft voor het herhalen van de kaart; of NULL als de kaart leeg is.

Opmerkingen

De herhalingsvolgorde is niet voorspelbaar; daarom heeft het "eerste element in de kaart" geen speciale betekenis.

Example

Zie het voorbeeld voor CConnectionPoint::GetNextConnection.

CConnectionPoint::OnAdvise

Aangeroepen door het framework wanneer een verbinding tot stand wordt gebracht of verbroken.

virtual void OnAdvise(BOOL bAdvise);

Parameterwaarden

bAdvise
WAAR, als er een verbinding tot stand wordt gebracht; anders ONWAAR.

Opmerkingen

De standaard implementatie doet niets.

Overschrijf deze functie als u een melding wilt wanneer sinks verbinding maken met of de verbinding met uw verbindingspunt verbreken.

CConnectionPoint::QuerySinkInterface

Hiermee wordt een aanwijzer opgehaald naar de aangevraagde sink-interface.

virtual HRESULT QuerySinkInterface(
    LPUNKNOWN pUnkSink,
    void** ppInterface);

Parameterwaarden

pUnkSink
De id van de sink-interface die wordt aangevraagd.

ppInterface
Een aanwijzer naar de interfacepointer geïdentificeerd door pUnkSink. Als het object deze interface niet ondersteunt, is * ppInterface ingesteld op NULL.

Retourwaarde

Een standaard HRESULT-waarde.

Zie ook

CCmdTarget-klasse
Hiërarchiegrafiek