CConnectionPoint, classe
Définit un type particulier d'interface utilisé pour communiquer avec d'autres objets OLE, appelé « point de connexion ».
Syntaxe
class CConnectionPoint : public CCmdTarget
Membres
Constructeurs publics
Nom | Description |
---|---|
CConnectionPoint ::CConnectionPoint | Construit un objet CConnectionPoint . |
Méthodes publiques
Nom | Description |
---|---|
CConnectionPoint ::GetConnections | Récupère tous les points de connexion dans un mappage de connexion. |
CConnectionPoint ::GetContainer | Récupère le conteneur du contrôle propriétaire de la carte de connexion. |
CConnectionPoint ::GetIID | Récupère l’ID d’interface d’un point de connexion. |
CConnectionPoint ::GetMaxConnections | Récupère le nombre maximal de points de connexion pris en charge par un contrôle. |
CConnectionPoint ::GetNextConnection | Récupère un pointeur vers l’élément de connexion au pos. |
CConnectionPoint ::GetStartPosition | Démarre une itération de carte en retournant une valeur POSITION qui peut être passée à un GetNextConnection appel. |
CConnectionPoint ::OnAdvise | Appelé par l’infrastructure lors de l’établissement ou de la rupture des connexions. |
CConnectionPoint ::QuerySinkInterface | Récupère un pointeur vers l’interface récepteur demandée. |
Notes
Contrairement aux interfaces OLE normales, utilisées pour implémenter et exposer les fonctionnalités d’un contrôle OLE, un point de connexion implémente une interface sortante capable de lancer des actions sur d’autres objets, telles que le déclenchement d’événements et les notifications de modification.
Une connexion se compose de deux parties : l’objet appelant l’interface, appelé « source », et l’objet implémentant l’interface, appelé « récepteur ». En exposant un point de connexion, une source permet aux récepteurs d’établir des connexions à elle-même. Par le biais du mécanisme de point de connexion, un objet source obtient un pointeur vers l’implémentation du récepteur d’un ensemble de fonctions membres. Par exemple, pour déclencher un événement implémenté par le récepteur, la source peut appeler la méthode appropriée de l'implémentation du récepteur.
Par défaut, une COleControl
classe dérivée de -implémente deux points de connexion : un pour les événements et un pour les notifications de modification de propriété. Ces connexions sont utilisées respectivement pour le déclenchement d’événements et pour notifier un récepteur (par exemple, le conteneur du contrôle) lorsqu’une valeur de propriété a changé. La prise en charge est également fournie pour que les contrôles OLE implémentent des points de connexion supplémentaires. Pour chaque point de connexion supplémentaire implémenté dans votre classe de contrôle, vous devez déclarer une « partie de connexion » qui implémente le point de connexion. Si vous implémentez un ou plusieurs points de connexion, vous devez également déclarer une seule « carte de connexion » dans votre classe de contrôle.
L’exemple suivant illustre une carte de connexion simple et un point de connexion pour le Sample
contrôle OLE, constitué de deux fragments de code : la première partie déclare la carte de connexion et le point ; la seconde implémente cette carte et ce point. Le premier fragment est inséré dans la déclaration de la classe de contrôle, sous la protected
section :
// Connection point for ISample interface
BEGIN_CONNECTION_PART(CMyClass, SampleConnPt)
CONNECTION_IID(IID_ISampleSink)
END_CONNECTION_PART(SampleConnPt)
DECLARE_CONNECTION_MAP()
Les macros BEGIN_CONNECTION_PART et END_CONNECTION_PART déclarent une classe incorporée ( XSampleConnPt
dérivée de ) qui implémente ce point de CConnectionPoint
connexion particulier. Si vous souhaitez remplacer les CConnectionPoint
fonctions membres ou ajouter des fonctions membres de votre choix, déclarez-les entre ces deux macros. Par exemple, la macro CONNECTION_IID remplace la CConnectionPoint::GetIID
fonction membre lorsqu’elle est placée entre ces deux macros.
Le deuxième fragment de code est inséré dans le fichier d’implémentation (. CPP) de votre classe de contrôle. Ce code implémente la carte de connexion, qui inclut le point de connexion supplémentaire, SampleConnPt
:
BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()
Une fois ces fragments de code insérés, l’exemple de contrôle OLE expose un point de connexion pour l’interface ISampleSink
.
En règle générale, les points de connexion prennent en charge la « multidiffusion », c’est-à-dire la possibilité de diffuser sur plusieurs récepteurs connectés à la même interface. Le fragment de code suivant montre comment effectuer la multidiffusion en itérant à travers chaque récepteur sur un point de connexion :
void CMyClass::CallSinkFunc()
{
POSITION pos = m_xSampleConnPt.GetStartPosition();
ISampleSink *pSampleSink;
while (pos != NULL)
{
pSampleSink = (ISampleSink *)(m_xSampleConnPt.GetNextConnection(pos));
if (pSampleSink != NULL)
{
pSampleSink->SinkFunc();
}
}
}
Cet exemple récupère l'ensemble actuel de connexions sur le point de connexion SampleConnPt
par un appel à CConnectionPoint::GetConnections
. Il effectue ensuite une itération via les connexions et appelle ISampleSink::SinkFunc
chaque connexion active.
Pour plus d’informations sur l’utilisation CConnectionPoint
, consultez l’article Points de connexion.
Hiérarchie d'héritage
CConnectionPoint
Spécifications
En-tête : afxdisp.h
CConnectionPoint ::CConnectionPoint
Construit un objet CConnectionPoint
.
CConnectionPoint();
CConnectionPoint ::GetConnections
Appelez cette fonction pour récupérer toutes les connexions actives pour un point de connexion.
const CPtrArray* GetConnections();
Valeur de retour
Pointeur vers un tableau de connexions actives (récepteurs). Certains des pointeurs du tableau peuvent être NULL. Chaque pointeur non NULL de ce tableau peut être converti en un pointeur vers l’interface récepteur à l’aide d’un opérateur de cast.
CConnectionPoint ::GetContainer
Appelé par l’infrastructure pour récupérer le IConnectionPointContainer
point de connexion.
virtual LPCONNECTIONPOINTCONTAINER GetContainer();
Valeur de retour
En cas de réussite, un pointeur vers le conteneur ; sinon NULL.
Notes
Cette fonction est généralement implémentée par la macro BEGIN_CONNECTION_PART.
CConnectionPoint ::GetIID
Appelé par l’infrastructure pour récupérer l’ID d’interface d’un point de connexion.
virtual REFIID GetIID() = 0;
Valeur de retour
Référence à l’ID d’interface du point de connexion.
Notes
Remplacez cette fonction pour retourner l’ID d’interface de ce point de connexion.
CConnectionPoint ::GetMaxConnections
Appelé par l’infrastructure pour récupérer le nombre maximal de connexions prises en charge par le point de connexion.
virtual int GetMaxConnections();
Valeur de retour
Nombre maximal de connexions prises en charge par le contrôle, ou -1 si aucune limite n’est atteinte.
Notes
L’implémentation par défaut retourne -1, indiquant aucune limite.
Remplacez cette fonction si vous souhaitez limiter le nombre de récepteurs pouvant se connecter à votre contrôle.
CConnectionPoint ::GetNextConnection
Récupère un pointeur vers l’élément de connexion au pos.
LPUNKNOWN GetNextConnection(POSITION& pos) const;
Paramètres
pos
Spécifie une référence à une valeur POSITION retournée par un appel précédent GetNextConnection
ou GetStartPosition .
Valeur de retour
Pointeur vers l’élément de connexion spécifié par pos ou NULL.
Notes
Cette fonction est particulièrement utile pour effectuer une itération sur tous les éléments de la carte de connexion. Lors de l’itération, ignorez les valeurs NULL retournées par cette fonction.
Exemple
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
Démarre une itération de carte en retournant une valeur POSITION qui peut être passée à un appel GetNextConnection .
POSITION GetStartPosition() const;
Valeur de retour
Valeur POSITION qui indique une position de départ pour itérer la carte ; ou NULL si la carte est vide.
Notes
La séquence d’itération n’est pas prévisible ; par conséquent, le « premier élément de la carte » n’a aucune signification particulière.
Exemple
Consultez l’exemple de CConnectionPoint ::GetNextConnection.
CConnectionPoint ::OnAdvise
Appelé par l’infrastructure lorsqu’une connexion est établie ou interrompue.
virtual void OnAdvise(BOOL bAdvise);
Paramètres
bAdvise
TRUE, si une connexion est établie ; sinon FALSE.
Notes
L'implémentation par défaut n'exécute aucune opération.
Remplacez cette fonction si vous souhaitez recevoir une notification lorsque les récepteurs se connectent ou se déconnectent de votre point de connexion.
CConnectionPoint ::QuerySinkInterface
Récupère un pointeur vers l’interface récepteur demandée.
virtual HRESULT QuerySinkInterface(
LPUNKNOWN pUnkSink,
void** ppInterface);
Paramètres
pUnkSink
Identificateur de l’interface récepteur demandée.
ppInterface
Pointeur vers le pointeur d’interface identifié par pUnkSink. Si l’objet ne prend pas en charge cette interface, * ppInterface est défini sur NULL.
Valeur de retour
Valeur HRESULT standard.