描述:
自己实现了IDocHostUIHandler,现在想用ICustomDoc::SetUIHandler函数将我的接口传递给IE,但不知道怎么得到这个接口?
解决方案1:
1 ICustomDocs是HTMLDocument对象而不是WebBrowser对象暴露的接口。WebBrowser对象可能包含各种文档,例如ShellDocView、Word或者Adobe Acrobat Reader。
2 检查每一步操作是否成功;检查是否处理了每个框架页面,检查你的IDocHostUIHandler::ShowContextMenu实现是否被调用了。
在bho中得到iWebbrowser2对象m_spWebBrowser,然后
if (m_spWebBrowser)
{
CComPtr<IDispatch> spDoc;
m_spWebBrowser->get_Document(&spDoc);
if (spDoc)
{
CComQIPtr<ICustomDoc, &IID_ICustomDoc> spCustomDoc(spDoc);
if (spCustomDoc)
spCustomDoc->SetUIHandler(this);
}
}
更多参考 msdn:
Take Total Control of Internet Explorer with Advanced Hosting Interfaces
Scott Roberts