1

BHOに、特定のWebページのある要素のonmousedownイベントをリッスンさせたい。特定の要素を見つけるすべてのコードがあり、msdnには、get_onmousedownイベントを使用する必要があると書かれています。私はこのコードを思いついた。

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

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

4

1 に答える 1

4

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

このコンテキストでのイベント ハンドラーは、実装する COM インスタンスであるため、イベント ハンドラー オブジェクトが実装するIDispatchへのポインターを渡す必要があります。IDispatch

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

注: -put_の代わりにget_、 handler を登録します

これで、次のようIDispatch::Invoke()に呼び出されます:

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

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

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

    if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE)) 
    {
        // ...
    }
}
于 2010-03-09T01:10:54.860 に答える