Mausereignis BHO
-
18-09-2019 - |
Frage
Ich mag mein BHO hören Falle eines Elements in einer bestimmten Webseite onMouseDown. Ich habe den gesamten Code, der das spezifische Element zu finden, und in Msdn sagt sein, dass ich die get_onmousedown Ereignis. Ich kam mit diesem Code auf.
CComQIPtr<IHTMLElement> someElement;
VARIANT mouse_eve;
someElement->get_onmousedown(&mouse_eve);
Die Frage ist, wie kann ich ihm sagen, eine Funktion auszuführen, wenn dieses Ereignis eintritt?
Lösung
v
-. Variante des Typs, der die VT_DISPATCH IDispatch Schnittstelle eines Objekts mit einem Standardverfahren spezifiziert, die aufgerufen wird, wenn das Ereignis eintritt
Eventhandler in diesem Zusammenhang sind COM-Instanzen, die IDispatch
implementieren - so müssen Sie einen Zeiger auf ein IDispatch
zu übergeben, die Ihr Event-Handler-Objekt implementiert:
CComQIPtr<IDispatch> spDisp(spMyHandler); // something like that
someElement->put_onmousedown(CComVariant(spDisp));
. Hinweis: put_
statt get_
- Sie wollen einen Handler registrieren
Auf dieser, IDispatch::Invoke()
wird aufgerufen mit:
-
wFlags
enthältDISPATCH_METHOD
( "eine Methode aufgerufen wird immer" ) -
dispIdMember
sein0
/DISPID_VALUE
( "die Standardmethode" )
Setzen Sie dieses sollte zusammen etwas werden wie:
HRESULT MyHandler::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*)
{
// ...
if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE))
{
// ...
}
}