ATL, résumé de la gestion des événements
En général, la gestion des événements COM est un processus relativement simple. Il existe trois étapes principales :
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.
Implémentation de l'interface
Il existe quatre méthodes principales d’implémentation d’une interface à l’aide d’ATL.
Provenir de | Adapté au type d’interface | Exige que vous implémentez toutes les méthodes* | Nécessite une bibliothèque de types au moment de l’exécution |
---|---|---|---|
L’interface | Table virtuelle | Oui | Non |
IDispatchImpl | Double | Oui | Oui |
IDispEventImpl | Dispinterface | Non | Oui |
IDispEventSimpleImpleImpl | Dispinterface | Non | Non |
* Lorsque vous utilisez des classes de prise en charge ATL, vous n’êtes jamais obligé d’implémenter manuellement les méthodes ou IDispatch
les IUnknown
méthodes.
Conseils et annulation de la consultation de la source d’événement
Il existe trois méthodes principales pour conseiller et annuler la consultation d’une source d’événement à l’aide d’ATL.
Fonction Conseiller | Fonction Unadvise | Le plus adapté à une utilisation avec | Vous devez effectuer le suivi d’un cookie | Commentaires |
---|---|---|---|---|
AtlAdvise, CComPtrBase ::Advise | AtlUnadvise | Interfaces vtables ou doubles | Oui | AtlAdvise est une fonction ATL globale. CComPtrBase::Advise est utilisé par CComPtr et CComQIPtr. |
IDispEventSimpleImpl ::D ispEventAdvise | IDispEventSimpleImpl ::D ispEventUnadvise | IDispEventImpl ou IDispEventSimpleImpl | Non | Moins de paramètres que AtlAdvise dans la mesure où la classe de base effectue plus de travail. |
CComCompositeControl ::AdviseSinkMap(TRUE) | CComCompositeControl ::AdviseSinkMap(FALSE) | Contrôles ActiveX dans les contrôles composites | Non | CComCompositeControl::AdviseSinkMap conseille toutes les entrées dans la carte du récepteur d’événements. La même fonction désadvise les entrées. Cette méthode est appelée automatiquement par la CComCompositeControl classe. |
CAxDialogImpl ::AdviseSinkMap(TRUE) | CAxDialogImpl ::AdviseSinkMap(FALSE) | Contrôles ActiveX dans une boîte de dialogue | Non | CAxDialogImpl::AdviseSinkMap conseille et annule tous les contrôles ActiveX dans la ressource de boîte de dialogue. Cette opération est effectuée automatiquement pour vous. |