1.去除滚动条
方法是得到一个 IHTMLBodyElement的句柄,用其下面的 put_scroll方法将滚动条去掉,这个方法是我跟别人学的,实现方法如下。
BOOL CXXXDlg::KillHtmlScrollBars(LPDISPATCH pdispDoc) { CComQIPtr<IHTMLDocument2> piDoc(pdispDoc); CComPtr<IHTMLElement> piElem; CComPtr<IHTMLBodyElement> piBody;
if (!piDoc) return FALSE;
piDoc->get_body(&piElem);
if (!piElem) return FALSE;
piElem->QueryInterface(&piBody);
if (!piBody) return FALSE;
return SUCCEEDED(piBody->put_scroll(CComBSTR(_T("no")))); } |
(给webbrowser控件添加 DocumentComplete消息的响应函数的方法,用CLASSWIZARD即可,如果你的webbrowser控件是动态生成的,有一个办法比较好用,就是添加一个和你动态生成ID值一样的webbrowser控件,比如都是IDXXX,然后添加消息映射后将其删除即可 )
其响应函数实现为
void CReader_v212Dlg::OnDocumentCompleteExplorer2(LPDISPATCH pDisp, VARIANT FAR* URL) { // TODO: Add your control notification handler code here CComQIPtr<IWebBrowser2> piWB(pDisp); CComPtr<IDispatch> pdispDoc;
if (!piWB) return;
piWB->get_Document(&pdispDoc);
if (!pdispDoc) return;
KillHtmlScrollBars(pdispDoc); } |
2.让webbrowser中的内容滚动到指定位置
这个方法是我自己想出来的,不知是否合适,如您有更好的办法,烦请留言。
得到这个webbrowser控件的IHTMLWindow2接口,用其下面的scrollTo方法。
下面是示例代码:
LPDISPATCH pDisp = NULL; pDisp = m_webBrowser.GetDocument();
IHTMLWindow2* pWnd = NULL; IHTMLDocument2* pDoc = NULL;
pDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDoc); pDoc->get_parentWindow(&pWnd);
pWnd->scrollTo(100,100); // 这里要滚动的目标位置 |
目前没有解决的一个问题是如何得到webbrowser显示内容的尺寸,就是要滚动的范围,比如显示一个网页,其大小为1000X1000像素,而控件窗口只有100X100大,在显示时如何得到这个1000X1000值。
如果您有办法,还请多多指教。
即便没有解决,如果能在下面留言部分粘贴一些参考链接也非常感谢。