Compartilhar via


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.

Derive 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 Não
IDispatchImpl Dupla Sim Yes
IDispEventImpl Dispinterface Não Sim
IDispEventSimpleImpl Dispinterface Não Não

* 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ê.

Confira também

Manipulação de eventos
Suporte a IDispEventImpl