Evento do mouse BHO
-
18-09-2019 - |
Pergunta
Quero que meu BHO ouça o evento OnMousedown de algum elemento em uma determinada página da web. Eu tenho todo o código que encontra o elemento específico e, no msdn, diz que eu preciso usar o get_onmousedown evento. Eu vim com este código.
CComQIPtr<IHTMLElement> someElement;
VARIANT mouse_eve;
someElement->get_onmousedown(&mouse_eve);
A questão é: como digo para executar alguma função quando esse evento ocorre?
Solução
v
- Variante do tipo VT_DISPATCH que especifica a interface IDISPATCH de um objeto com um método padrão que é chamado quando o evento ocorre.
Os manipuladores de eventos neste contexto são casos que implementam IDispatch
- Então você precisa passar um ponteiro para um IDispatch
que o seu objeto de manipulador de eventos implementa:
CComQIPtr<IDispatch> spDisp(spMyHandler); // something like that
someElement->put_onmousedown(CComVariant(spDisp));
Observação: put_
ao invés de get_
- Você quer registrar um manipulador.
Nisto, IDispatch::Invoke()
é chamado com:
wFlags
contendoDISPATCH_METHOD
("Um método está sendo invocado")dispIdMember
ser0
/DISPID_VALUE
("O método padrão")
Junte isso, isso deve se tornar algo como:
HRESULT MyHandler::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*)
{
// ...
if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE))
{
// ...
}
}