Partilhar via


Eventos de controle (COM)

Além de fornecer propriedades e métodos, um controle também fornece interfaces de saída para notificar seu cliente de eventos. O cliente deve oferecer suporte ao tratamento desses eventos. Consulte Eventos em COM e Objetos conectáveis para obter mais informações sobre como os objetos conectáveis funcionam.

Um controle pode suportar diferentes interfaces de saída para diferentes finalidades. Todas as interfaces de saída são marcadas como interfaces de origem nas informações de tipo do controle, mas apenas uma é marcada como padrão para indicar que é a interface de saída primária.

Um contêiner pode suportar uma ou mais das interfaces de saída definidas por um controle. O controle deve estar preparado para lidar com contêineres que apenas fornecem suporte para algumas de suas interfaces de saída.

Os controles suportam quatro tipos de eventos:

  • Solicitar eventos. Um controle solicita permissão de seu cliente para fazer algo chamando um método na interface de saída, disparando assim um evento de solicitação. O cliente sinaliza o controle através de um parâmetro booleano, out-no método que o controle chamou. O cliente pode, assim, impedir que o controle execute a ação.
  • Antes dos acontecimentos. Um controle notifica seu cliente hat que ele vai fazer algo chamando um método na interface de saída, acionando assim um evento before. O cliente não tem a oportunidade de impedir a ação, mas pode tomar todas as medidas necessárias dada a ação que está prestes a ocorrer.
  • Após os eventos. Um controle notifica seu cliente que ele acabou de fazer algo chamando um método na interface de saída, acionando assim um evento after. Novamente, o cliente não pode cancelar essa ação, mas pode tomar as medidas necessárias dada a ação que ocorreu.
  • Faça eventos. Um controle dispara um evento do para permitir que seu cliente substitua a ação do controle e forneça algumas ações alternativas ou suplementares. Normalmente, o método que um controle chama para um evento do tem vários parâmetros para negociar com o cliente sobre as ações que ocorrerão.

Os seguintes dispids são definidos para eventos padrão que os controles podem suportar: Click, DblClick, KeyDown, KeyPress, KeyUp, MouseMove, MouseUp e Error. Todos esses eventos padrão têm valores DISPID negativos, indicando seu status padrão.

O métodoIOleControl::FreezeEvents, quando chamado com TRUE, informa a um controle se o contêiner se incomodará em manipular eventos do controle até que FreezeEvents seja novamente chamado com FALSE. Durante esse tempo, o controle não pode depender do contêiner realmente lidar com quaisquer eventos. Se um evento precisar ser manipulado, o controle deverá enfileirá-lo para dispará-lo quando FreezeEvents for chamado com FALSE.

Controles ActiveX