Resumo da manipulação de eventos da ATL
Em geral, lidar com eventos COM é um processo relativamente simples. Existem três etapas principais:
Implementar a interface do evento em seu objeto.
Informar a origem do evento de que seu objeto deseja receber eventos.
Desinformar a origem do evento de que seu objeto não precisa mais receber eventos.
Implementar a interface
Há quatro maneiras principais de implementar uma interface usando a ATL.
Derivar de | Adequado para o tipo de interface | Exige que você implemente todos os métodos* | Exige uma biblioteca de tipos em tempo de execução |
---|---|---|---|
A interface . | Vtable | Sim | No |
IDispatchImpl | Dupla | Sim | Sim |
IDispEventImpl | Dispinterface | Não | Sim |
IDispEventSimpleImpl | Dispinterface | Não | No |
* Ao usar classes de suporte da ATL, você nunca precisa implementar os métodos IUnknown
ou IDispatch
manualmente.
Aconselhar e desinformar a origem do evento
Há três maneiras principais de aconselhar e desinformar uma fonte de evento usando a ATL.
Função Informar | Função Desinformar | Mais adequada para uso com | Exige que você acompanhe um cookie | Comentários |
---|---|---|---|---|
AtlAdvise, CComPtrBase::Advise | AtlUnadvise | Interfaces vtable ou duplas | Sim | AtlAdvise é uma função ATL global. CComPtrBase::Advise é usado por CComPtr e CComQIPtr. |
IDispEventSimpleImpl::DispEventAdvise | IDispEventSimpleImpl::DispEventUnadvise | IDispEventImpl ou IDispEventSimpleImpl | Não | Menos parâmetros do que AtlAdvise , pois a classe base funciona mais. |
CComCompositeControl::AdviseSinkMap(TRUE) | CComCompositeControl::AdviseSinkMap(FALSE) | Controles ActiveX em controles compostos | Não | CComCompositeControl::AdviseSinkMap aconselha todas as entradas no mapa do coletor de eventos. A mesma função desinforma as entradas. Esse método é chamado automaticamente pela classe CComCompositeControl . |
CAxDialogImpl::AdviseSinkMap(TRUE) | CAxDialogImpl::AdviseSinkMap(FALSE) | Controle ActiveX em uma caixa de diálogo | Não | CAxDialogImpl::AdviseSinkMap informa e desinforma todos os controles ActiveX no recurso de caixa de diálogo. Isso é feito automaticamente para você. |