マウスイベントBHO
-
18-09-2019 - |
質問
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))
{
// ...
}
}
所属していません StackOverflow