我想让我的BHO监听某个网页中某个元素的onmousedown事件。我有找到特定元素的所有代码,并且在msdn中它告诉我需要使用get_onmousedown事件。我想出了这个代码。
CComQIPtr<IHTMLElement> someElement;
VARIANT mouse_eve;
someElement->get_onmousedown(&mouse_eve);问题是,当这个事件发生时,我如何告诉它运行一些函数?
发布于 2010-03-09 09:10:55
v- VT_DISPATCH类型的变量,指定具有默认方法的对象的IDispatch接口,该方法在事件发生时被调用。
此上下文中的事件处理程序是实现IDispatch的COM实例,因此您需要传递一个指向事件处理程序对象实现的IDispatch的指针:
CComQIPtr<IDispatch> spDisp(spMyHandler); // something like that
someElement->put_onmousedown(CComVariant(spDisp));注意:` `put_ _instead of_ _get` -您想要注册一个处理程序。
在这一点上,使用以下命令调用IDispatch::Invoke():
包含
wFlags (“方法正在被调用”) dispIdMember the DISPATCH_METHOD / 0 (“默认方法”)总而言之,这应该是这样的:
HRESULT MyHandler::Invoke(DISPID dispIdMember, REFIID, LCID, WORD wFlags,
DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*)
{
// ...
if((wFlags & DISPATCH_METHOD) && (dispIdMember == DISPID_VALUE))
{
// ...
}
}https://stackoverflow.com/questions/2405807
复制相似问题