我希望我的 BHO 监听某个网页中某些元素的 onmousedown 事件。我有找到特定元素的所有代码,在 msdn 中它说我需要使用get_onmousedown事件。我想出了这个代码。
CComQIPtr<IHTMLElement> someElement;
VARIANT mouse_eve;
someElement->get_onmousedown(&mouse_eve);
问题是,当此事件发生时,我如何告诉它运行某些功能?
我希望我的 BHO 监听某个网页中某些元素的 onmousedown 事件。我有找到特定元素的所有代码,在 msdn 中它说我需要使用get_onmousedown事件。我想出了这个代码。
CComQIPtr<IHTMLElement> someElement;
VARIANT mouse_eve;
someElement->get_onmousedown(&mouse_eve);
问题是,当此事件发生时,我如何告诉它运行某些功能?
v- 类型为 VT_DISPATCH 的 VARIANT,它使用事件发生时调用的默认方法指定对象的 IDispatch 接口。
此上下文中的事件处理程序是实现的 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))
{
// ...
}
}