Une fois que vous avez inséré tous les contrôles nécessaires dans le contrôle composite, l'étape suivante consiste à ajouter de nouvelles fonctionnalités. Cette nouvelle fonctionnalité se divise généralement en deux catégories:
Pour l'objet et le champ d'application du présent article, la partie restante de cette section se concentre uniquement sur la gestion des événements.
Pour chaque contrôle de contenu, que vous souhaitez gérer des événements, vous devez implémenter une interface de dispatch des événements en la dérivant de la classe de modèle IDispEventImpl . Cette dérivation est faite dans la déclaration de votre contrôle composite et se compose de deux paramètres
La ligne de code exemple qui suit, dans la déclaration de classe de base déclare une interface IDispEventImpl pour un contrôle ( IDC_CIRCCTRL1 ), pour la classe de contrôle composite ( CMyCompositeCtrl ).
iDispEventImpllt public, IDC_CIRCCTL1, CMyCompositeCtrl & gt;
Après avoir déclaré la répartition des classes d'événements pour chaque contrôle de contenu, vous devez ajouter une événement récepteur carte à l'objet de contrôle composite. Cette carte accomplit deux choses:
La carte d'évier événement est implémentée à l'aide de plusieurs macros prédéfinies:
BEGIN_SINK_MAP()CtrlName)
Déclare le début de la carte de récepteur d'événement pour le contrôle composite CtrlName.
SINK_ENTRY()CtrlID, DispIID, dispID, EventHandler)
Déclare la fonction de gestionnaire d'événements (EventHandler) pour l'événement spécifié (dispID), de l'interface de dispatch DispIID, pour le contrôle identifié par CtrlID.
Déclare la fin de la carte de récepteur d'événement pour le contrôle composite CtrlName.
L'exemple de code suivant (situé dans le.RPC fichier du contrôle composite) déclare une carte de récepteur d'événement pour le CMyCompositeCtrl objet. Il déclare deux gestionnaires d'événements pour les contrôles contenus deux ( IDC_CIRCCTL1 et IDC_CIRCCTL2 ). L'événement Click pour les deux contrôles est géré par le OnClick_CircCtrl1 et OnClick_CircCtrl2 fonctions.
BEGI&N_SINK_MAP(CMyCompositeCtrl)
nbsp ; SINK_ENTRY (IDC_CIRCCTL1, DISPID_CLICK, OnClick_CircCtrl1)
SINK_ENTRY (IDC_CIRCCTL2, DISPID_CLICK, OnClick_CircCtrl2)
END_SINK_MAP()
Une fois que vous avez déclaré la carte d'évier événement, procéder pour implémenter les gestionnaires d'événements pour le contrôle composite.
Dans la déclaration de l'étape de l'événement couler la carte, vous avez ajouté une nouvelle carte que deux gestionnaires d'événements pour les deux contrôles contiennent du Circ a déclaré. Il est maintenant temps de mettre en œuvre ces gestionnaires d'événements. Le format est le suivant:
retVal __stdcall Eve&ntHandler (args)
{
nbsp ; événement //handle correctement
}
où retVal est la valeur de retour de gestionnaire d'événements, EventHandler est le nom du gestionnaire de fonction, et args est une liste facultative d'arguments de l'événement. Ce nom doit correspondre à l'une de l'événement gestionnaires déclarés dans la carte de puits événement du contrôle composite.
L'exemple de code suivant définit un gestionnaire d'événements (l'événement Click) pour le contrôle de contenu identifié parIDC_CIRCCTRL1:
__stdcall void O&nClick_CircCtrl1)
{
nbsp ; MessageBox ("cliquez sur événement déclenché!", « CircCtl1 », MB_OK) ;
}
Ajouter des gestionnaires d'événements pour les entrées restantes coulent dans le cas où la carte de votre contrôle composite.
Avant que le contrôle composite devient pleinement actif, chaque contrôle de contenu, dont les événements que vous gérez, est interrogée pour interfaces sortantes, comme une interface de dispatch événement. Si les interfaces sont trouvées, les connexions sont établies et une référence à l'interface sortante est utilisée pour gérer les événements du contrôle. Cette procédure est appelée « informer le contrôle » et est effectuée automatiquement par l'objet de contrôle composite, à l'aide de la carte récepteur événement, lors de l'initialisation du contrôle composite.
Après que l'utilisateur a rejeté la boîte de dialogue, toutes les références stockées aux interfaces sortants des contrôles contenus sont nettoyés. Ceci est appelé « avertir le contrôle » et est également effectuée automatiquement par le contrôle composite.