webbrowser导航完毕设置焦点

2017-02-12  本文已影响157人  晓函

自己软件内页加了一个webbrowser,但是每次在外面输入网页地址后,鼠标移动到webbrowser内总是不能直接使用滚轮,一定要点一下页面,让页面获取焦点,才能使用滚轮滚动网页。
于是自己在写了一个函数,然后再NavigateComplete2调用,这样每次在地址栏输入URL后,webbrowser导航完毕后就自动设焦点了,鼠标移动过去就能滚动网页了,用户体验好了许多。


//Com操作
#include "Mshtml.h"
#include "atlcomcli.h"

/// 设置网页为焦点, 使鼠标滚动时, 可以让网页元素进行滚动  ,不需要提前用鼠标点击。
/// 相当于当网页打开后,先用鼠标在网页中空白处点击一下,再用鼠标滚轮滚动网页
void CPanelWebHomeUI::SetPageFocus(){

    //使用CComQIPtr智能指针,它们在销毁的时候,不需要手动去Replease释放接口指针,
    //在赋值的时候,也不需要手动的AddRef,
    //在出现异常的时候,会自动处理异常,而不需要额外的异常处理代码。
    //但是记住:重复赋值的时候,需要提前手动Replease释放
    CComQIPtr<IWebBrowser2> pWebBrowser2;
    CComQIPtr<IDispatch> pDocDisp;
    CComQIPtr<IHTMLDocument4> pHtmlDoc4;


    VARIANT var;
    HRESULT hr = S_FALSE;


    //用COM接口来设置元素
    pWebBrowser2 = m_pBrowser->GetWebBrowser2();
    if (!pWebBrowser2)
        return;


    hr = pWebBrowser2->get_Document(&pDocDisp);
    if (FAILED(hr) || NULL == pDocDisp)
        return;


    hr = pDocDisp->QueryInterface(IID_IHTMLDocument4, (void**)&pHtmlDoc4);
    if (FAILED(hr) || NULL == pHtmlDoc4)
        return;

    //设置焦点
    pHtmlDoc4->focus();

}

上一篇下一篇

猜你喜欢

热点阅读