CConnectionPoint

La classe CConnectionPoint définit un type spécial d'interface utilisé pour communiquer avec d'autres objets OLE, appelés « point de connexion ». Contrairement aux interfaces OLE normales, qui servent à mettre en œuvre et d'exposer les fonctionnalités d'un contrôle OLE, un point de connexion implémente une interface sortante qui est capable d'entamer des actions sur d'autres objets, tels que les événements et notifications de changement.

Un lien se compose de deux parties : l'objet appelant l'interface, appelée la « source » et l'objet implémentant l'interface, appelé le « puits ». En exposant un point de connexion, une source permet de puits établir des connexions à lui-même. Grâce au mécanisme de point de connexion, un objet source obtient un pointeur vers l'implémentation de l'évier d'un ensemble de fonctions membres. Par exemple, pour déclencher un événement mis en œuvre par le récepteur, la source peut appeler la méthode appropriée de la mise en œuvre de l'évier.

Par défaut, un COleControl-classe dérivée implémente deux points de connexion : une pour les événements et l'autre pour la propriété modifier les notifications. Ces connexions sont utilisées, respectivement, pour le déclenchement de l'événement et de notification un évier (par exemple, le conteneur du contrôle) quand une valeur de propriété a changé. Un soutien est également aux contrôles OLE mettre en œuvre des points de connexion supplémentaires. Pour chaque point de connexion supplémentaires mis en œuvre dans la classe de votre 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 un simple « carte de connexion » dans la classe de votre contrôle.

L'exemple suivant montre une carte de connexion simple et une connexion pour le Sample contrôle OLE, composée de deux fragments de code : la première partie déclare le carte de connexion et le point ; de la seconde met en œuvre cette carte et le point. Le premier fragment est inséré dans la déclaration de la classe de contrôle, sous la section protégée

 nbsp ;   / / Point de connexion pour ISample, interface
    BEGI&N_CONNECTION_PART (CSampleCtrl, 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 intégrée, XSampleConnPt (dérivé de CConnectionPoint) qui implémente ce point de connexion particulière. Si vous souhaitez substituer les fonctions membres de CConnectionPoint , ou ajouter des fonctions des membres de votre propre, déclarer entre ces deux macros. Par exemple, la macro CONNECTION_IID substitue la fonction membre CConnectionPoint::GetIID lorsqu'ils sont placés entre ces deux macros.

Le deuxième fragment de code est inséré dans le fichier de mise en œuvre (.RPC) de la classe de votre contrôle. Ce code implémente la carte de connexion, qui comprend le point de connexion supplémentaires,SampleConnPt:

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

Une fois que ces fragments de code ont été insérés, le contrôle OLE échantillon expose un point de connexion pour l'interface ISampleSink.

Généralement, les points de connexion en charge « multidiffusion » ; la capacité de diffuser de multiples puits relié à la même interface. Le fragment de code suivant montre comment réaliser la multidiffusion par itération sur chaque puits sur un point de connexion:

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

int cConnections = pConnections - > GetSize() ;
    ISampleSink * pSampleSink ;
    for (int i = 0; i < cConnections; i ++)
    {
        pSampleSink = (ISampleSink *) (pConnections - > GetAt(i)) ;
        ASSERT (pSampleSink! = NULL) ;
        pSampleSink - > SinkFunc() ;
    }
}

Cet exemple récupère le jeu actuel de connexions sur la SampleConnPt point de connexion avec un appel à CConnectionPoint::GetConnections . Il parcourt ensuite les connexions et les appels ISampleSink::SinkFunc sur chaque connexion active.

Pour plus d'informations sur l'utilisation de CConnectionPoint, consultez l'article Les Points de connexion dans le Guide du programmeur Visual C++.

# include lt;afxctl.h>

Membres de la classe |nbsp ; Classe de base | Graphique de la hiérarchie

Index