Riepilogo della gestione degli eventi ATL
In generale, la gestione degli eventi COM è un processo relativamente semplice. Esistono tre passaggi principali:
Implementare l'interfaccia evento nell'oggetto.
Consigliare all'origine evento che l'oggetto desidera ricevere eventi.
Annullare la visualizzazione dell'origine evento quando l'oggetto non deve più ricevere eventi.
Implementazione dell'interfaccia
Esistono quattro modi principali per implementare un'interfaccia usando ATL.
Derivare da | Adatto al tipo di interfaccia | Richiede l'implementazione di tutti i metodi* | Richiede una libreria dei tipi in fase di esecuzione |
---|---|---|---|
Interfaccia | Vtable | Sì | No |
IDispatchImpl | Doppio | Sì | Sì |
IDispEventImpl | Interfaccia dispatch | No | Sì |
IDispEventSimpleImpl | Interfaccia dispatch | No | No |
* Quando si usano classi di supporto ATL, non è mai necessario implementare manualmente i IUnknown
metodi o IDispatch
.
Consulenza e mancata visualizzazione dell'origine evento
Esistono tre modi principali per consigliare e annullare la visualizzazione di un'origine evento tramite ATL.
Funzione Di consiglio | Funzione Unadvise | Più adatto per l'uso con | Richiede di tenere traccia di un cookie | Commenti |
---|---|---|---|---|
AtlAdvise, CComPtrBase::Advise | AtlUnadvise | Interfacce vtable o dual | Sì | AtlAdvise è una funzione ATL globale. CComPtrBase::Advise viene usato da CComPtr e CComQIPtr. |
IDispEventSimpleImpl::D ispEventAdvise | IDispEventSimpleImpl::D ispEventUnadvise | IDispEventImpl o IDispEventSimpleImpl | No | Meno parametri rispetto al AtlAdvise fatto che la classe di base esegue più operazioni. |
CComCompositeControl::AdviseSinkMap(TRUE) | CComCompositeControl::AdviseSinkMap(FALSE) | Controlli ActiveX nei controlli compositi | No | CComCompositeControl::AdviseSinkMap consiglia tutte le voci nella mappa sink eventi. La stessa funzione annulla la visualizzazione delle voci. Questo metodo viene chiamato automaticamente dalla CComCompositeControl classe . |
CAxDialogImpl::AdviseSinkMap(TRUE) | CAxDialogImpl::AdviseSinkMap(FALSE) | Controlli ActiveX in una finestra di dialogo | No | CAxDialogImpl::AdviseSinkMap consiglia e annulla la visualizzazione di tutti i controlli ActiveX nella risorsa finestra di dialogo. Questa operazione viene eseguita automaticamente. |