Noções básicas de manipulação de eventos
Há três etapas comuns a todas a manipulação de eventos.Você precisará:
Implementar a interface de evento no seu objeto.
Seja recomendável a fonte do evento que seu objeto deseja receber eventos.
Unadvise a fonte de evento quando seu objeto não precise receber eventos.
A maneira que você implementará a interface de eventos depende do tipo.Uma interface de evento pode ser vtable, dupla, ou um dispinterface.Depende o designer da fonte de evento para definir a interface; você pode para implementar a interface.
Observação |
---|
Embora não haja nenhum motivo para técnica que uma interface de evento não pode ser dupla, há um número bons motivos de design evitar o uso de duals.Em o entanto, esta é uma decisão feita pelo designer/implementador da fonte de evento.Como você está trabalhando de uma perspectiva de evento sink, você precisa permitir a possibilidade que você não tenha nenhuma opção para implementar uma interface mas dupla do evento.Para obter mais informações sobre as interfaces duais, consulte Interfaces duais e ATL. |
Recomendar a fonte do evento pode ser dividido em três etapas:
Consulte o objeto de origem para IConnectionPointContainer.
Chamada IConnectionPointContainer::FindConnectionPoint que passa o IID de interface do evento que o interessa.Se com êxito, ele retornará a interface de IConnectionPoint em um objeto de ponto de conexão.
Chame IConnectionPoint::Advise que passa IUnknown o coletor de eventos.Se com êxito, ele retornará um cookie de DWORD que representa a conexão.
Depois que você tiver feito com êxito seu interesse em receber eventos, os métodos na interface do evento do objeto serão chamados de acordo com os eventos acionados pelo objeto de origem.Quando você não precisa receber eventos, você pode passar o cookie de volta ao ponto de conexão através de IConnectionPoint::Unadvise.Isso interromperá a conexão entre a fonte e o coletor.
Tome cuidado para evitar ciclos de referência ao manipular eventos.