用VisualStudio2005生成浏览器帮助对象(BHO)
2007-03-15 21:46:38 来源:WEB开发网核心提示: 以下是引用片段:voidSTDMETHODCALLTYPECHelloWorldBHO::OnDocumentComplete(IDispatch*pDisp,VARIANT*pvarURL){//从站点检索顶级窗口,HWNDhwnd;HRESULThr=m_spWebBrowser-&g
以下是引用片段:
voidSTDMETHODCALLTYPECHelloWorldBHO::OnDocumentComplete(IDispatch*pDisp,VARIANT*pvarURL)
{
//从站点检索顶级窗口。
HWNDhwnd;
HRESULThr=m_spWebBrowser->get_HWND((LONG_PTR*)&hwnd);
if(SUCCEEDED(hr))
{
//加载页面时输出消息框。
MessageBox(hwnd,L"大家好!",L"BHO",MB_OK);
}
}
请注意,消息框会将站点的顶层窗口用作其父窗口,而不仅仅是通过该参数传递 NULL。在 Internet Explorer 6 中,NULL 父窗口并不阻止应用程序,也就是说,在消息框等待用户输入时用户可以继续与浏览器交互。在某些情况下,这会导致浏览器挂起或崩溃。在 BHO 需要显示 UI 的这种少见情况下,应始终通过指定指向父窗口的句柄来确保该对话框为应用程序模态。
再一次试用
通过按 F5 再次启动 Internet Explorer。文档加载后,BHO 将显示其消息。
继续浏览以观察消息框出现的时间及频率。请注意,不仅在加载页面时会显示 BHO 警告,在通过单击“上一步”按钮重新加载该页面时也会显示 BHO 警告;但在单击“刷新”按钮时不会显示该警告。在 Internet Explorer 7 中,对于每个新的选项卡都会显示该消息框。
该事件在页面被下载和解析后激发,但是在 window.onload 事件触发之前激发。在有多个框架的情况下,该事件将激发多次,结束时后面跟随的是顶层框架。在随后的代码中,通过将事件的 pDisp 参数所传递的对象与在 SetSite 中进行缓存处理的顶层浏览器进行比较来检测出这一系列事件的最后事件。
Tags:VisualStudio 生成 浏览器
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接