Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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
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.