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?

Foi útil?

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 contendo DISPATCH_METHOD ("Um método está sendo invocado")
  • dispIdMember ser 0 / 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)) 
    {
        // ...
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top