質問

BHO に、特定の Web ページ内の要素の onmousedown イベントをリッスンさせたいと考えています。特定の要素を見つけるコードはすべてありますが、msdn では、 get_onmousedown イベント。このコードを思いつきました。

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

問題は、このイベントが発生したときに何らかの関数を実行するようにどのように指示すればよいでしょうか?

役に立ちましたか?

解決

v - イベントの発生時に呼び出されるデフォルトのメソッドを持つオブジェクトの IDispatch インターフェイスを指定する VT_DISPATCH 型の VARIANT。

このコンテキストにおけるイベント ハンドラーは、以下を実装する COM インスタンスです。 IDispatch - したがって、ポインタを渡す必要があります IDispatch イベント ハンドラー オブジェクトが以下を実装していることを確認します。

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

注記: put_ の代わりに get_ - ハンドラーを登録したい.

これについては、 IDispatch::Invoke() で呼び出されます:

  • wFlags 含む DISPATCH_METHOD (「メソッドが呼び出されています」)
  • dispIdMember いる 0 / DISPID_VALUE (「デフォルトの方法」)

これをまとめると次のようになります。

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

    if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE)) 
    {
        // ...
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top