自己软件内页加了一个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();
}