描述:
需要实现的功能:
1.用户在IE上选择一段文本后,弹出一个工具条.当用户放弃选择的文本后,工具条自动消失.
2.当鼠标移动到图片上时,弹出一个工具条;当鼠标离开图片时,工具条自动消失.
采用ATL实现BHO完成该功能。BHO是用于实现通信的COM接口。为了钩住浏览器事件,BHO需要建立一个私有的基于COM的通信通道。在BHO开发中,主要关心三个问题:a、需要触发的事件;b、如何将关注的事件向IE浏览器注册;c、事件发生后,如何处理。
在BHO开发过程中,上述三个关心的问题中,存在几个不明白的地方:
1、实现上述功能需要触发的事件是哪些?
图片上需要触发的事件是不是DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE和DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT,文本选择的事件是哪些?
2、这些事件如何向浏览器注册?一般DIID_DWebBrowserEvents2事件在SetSite函数中进行注册,实现上述功能是否同样是在这个函数中进行注册?
3、事件发生后处理的场所?一般处理事件都在Invoke函数中进行处理,实现上述功能是否同样也在该函数处理?
研究BHO有两个星期了,也找了一些例子,但是都没有相关的例子,实在是不明白。
前面已经开了一个帖子,http://community.csdn.net/Expert/TopicView3.asp?id=4835771
jiangsheng(蒋晟.Net[MVP]) 也给出了一些提示,
但是对BHO刚接触不久,因此从上述提示中,没有找到解决问题的方法。恳请大家给出一点稍微详细的解答,不甚感激。
解决方案1:
要示例,留个email.
解决方案2: 用ATL框架来做吧,Automation办法很管用的,
具体你说的那些DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE和DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT在Invoke中调试一下就知道是干什么用的了,
这个在MSDN有很详细的说明,
好像记得Codeproject上一篇Pop Broker的文章很不错,去找找
请问BHO是标准吗?
解决方案4: 1 http://msdn.microsoft.com/workshop/browser/mshtml/reference/events/htmltextcontainerevents/onselectstart.asp
2 在DocumentComplete之后才可以访问DOM中的元素
3 自己写event sink的话是这样,不过MFC/ATL之类的类库支持简洁的处理方法,参考http://www.microsoft.com/msj/0698/browser.aspx