El evento de ratón BHO
-
18-09-2019 - |
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?
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
contieneDISPATCH_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))
{
// ...
}
}