控制webbrowser控件

这个控件控制起来有点麻烦,得到的有些句柄不能操作,具体还在研究中,目前可以做如下工作。

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消息的响应函数调用即可。
(给
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值。
如果您有办法,还请多多指教。
即便没有解决,如果能在下面留言部分粘贴一些参考链接也非常感谢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值