Pregunta

Quiero que mi BHO para escuchar onMouseDown caso de algún elemento en una página web determinada. Tengo todo el código que encontrar el elemento específico, y en su MSDN dice que tengo que utilizar el get_onmousedown evento. Se me ocurrió con este código.

 CComQIPtr<IHTMLElement> someElement;
 VARIANT mouse_eve;
 someElement->get_onmousedown(&mouse_eve);

La pregunta es, ¿cómo le digo que se ejecute alguna función cuando se produce este evento?

¿Fue útil?

Solución

  

v -. VARIANT de tipo VT_DISPATCH que especifica la interfaz IDispatch de un objeto con un método predeterminado que se invoca cuando se produce el evento

Los controladores de eventos en este contexto son las instancias COM que implementan IDispatch - lo que necesita para pasar un puntero a una IDispatch que implementa el objeto controlador de eventos:

CComQIPtr<IDispatch> spDisp(spMyHandler); // something like that
someElement->put_onmousedown(CComVariant(spDisp));

Nota:. put_ en lugar de get_ - que desea registrar un controlador

En esta, IDispatch::Invoke() es llamado con:

  • wFlags contiene DISPATCH_METHOD ( "un método está siendo invocado" )
  • siendo dispIdMember 0 / DISPID_VALUE ( "el método predeterminado" )

En su conjunto esto debería ser algo así como:

HRESULT MyHandler::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags, 
                          DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*)
{
    // ...

    if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE)) 
    {
        // ...
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top