Principes de gestion des événements
Il existe trois étapes communes à la gestion des événements. Vous devez :
Implémentez l’interface d’événement sur votre objet.
Indiquez à la source d’événement que votre objet souhaite recevoir des événements.
Annulez la notification de la source d’événement lorsque votre objet n’a plus besoin de recevoir des événements.
La façon dont vous allez implémenter l’interface d’événement dépend de son type. Une interface d’événement peut être vtable, double ou dispinterface. Il appartient au concepteur de la source d’événement de définir l’interface ; il vous appartient d’implémenter cette interface.
Remarque
Bien qu’il n’existe aucune raison technique qu’une interface d’événement ne peut pas être double, il existe un certain nombre de bonnes raisons de conception pour éviter l’utilisation de doubles. Toutefois, il s’agit d’une décision prise par le concepteur/implémenteur de la source d’événement. Étant donné que vous travaillez du point de vue de l’événement sink
, vous devez autoriser la possibilité que vous n’ayez peut-être pas le choix, mais d’implémenter une interface d’événement double. Pour plus d’informations sur les interfaces doubles, consultez Dual Interfaces et ATL.
Vous pouvez décomposer la source d’événement en trois étapes :
Interrogez l’objet source pour I Connecter ionPointContainer.
Appelez I Connecter ionPointContainer ::Find Connecter ionPoint en passant l’IID de l’interface d’événement qui vous intéresse. Si elle réussit, cette opération renvoie l’interface I Connecter ionPoint sur un objet de point de connexion.
Appelez I Connecter ionPoint ::Conseiller en passant le
IUnknown
récepteur d’événements. Si elle réussit, cela renvoie unDWORD
cookie représentant la connexion.
Une fois que vous avez correctement inscrit votre intérêt pour recevoir des événements, les méthodes de l’interface d’événement de votre objet sont appelées en fonction des événements déclenchés par l’objet source. Lorsque vous n’avez plus besoin de recevoir d’événements, vous pouvez renvoyer le cookie au point de connexion via I Connecter ionPoint ::Unadvise. Cela interrompt la connexion entre la source et le récepteur.
Veillez à éviter les cycles de référence lors de la gestion des événements.