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 dar 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 dar suporte a 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 dar suporte a uma ou mais das interfaces de saída definidas por um controle. O controle deve estar preparado para lidar com contêineres que fornecem suporte apenas para algumas de suas interfaces de saída.
Os controles dão suporte a 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 por meio de um parâmetro booliano e externo no método chamado pelo controle. Assim, o cliente pode impedir que o controle execute a ação.
- Antes dos eventos. Um controle notifica seu chapéu de cliente de que ele fará algo chamando um método na interface de saída, disparando assim um evento anterior. O cliente não tem a oportunidade de impedir a ação, mas pode tomar todas as etapas necessárias, considerando a ação que está prestes a ocorrer.
- Após eventos. Um controle notifica seu cliente de que ele acabou de fazer algo chamando um método na interface de saída, disparando assim um evento após. Novamente, o cliente não pode cancelar essa ação, mas pode tomar as etapas 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 complementares. Normalmente, o método que um controle chama para um evento do tem uma série de parâmetros para negociar com o cliente sobre as ações que ocorrerão.
Os dispids a seguir são definidos para eventos padrão que os controles podem dar suporte: Clique, 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étodo IOleControl::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 manipulando eventos. Se um evento precisar ser tratado, o controle deverá enfileirar o evento para acioná-lo quando FreezeEvents for chamado com false.
Tópicos relacionados