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?

War es hilfreich?

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ält DISPATCH_METHOD ( "eine Methode aufgerufen wird immer" )
  • dispIdMember sein 0 / 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)) 
    {
        // ...
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top