请教怎样捕捉WebBrowser页面的滚动条滚动事件?(急)
请问怎样捕捉WebBrowser页面的滚动条滚动事件?(急!)
请问怎样捕捉WebBrowser页面的滚动条滚动事件?(急!)
------解决方案--------------------
http://community.****.net/Expert/TopicView3.asp?id=5260181
------解决方案--------------------
"我在OnDocumentComplete 中用 AfxConnectionAdvise 的方法挂接上了IHTMLWindow2 并且得到了DISPID_HTMLWINDOWEVENTS2_ONSCROLL 的事件函数。但是这个函数只能得到滚动事件的消息,而没办法得到滚动的方向和距离。 "
我的情况刚好跟他相反,能得到滚动的方向和距离,不知道怎么得到DISPID_HTMLWINDOWEVENTS2_ONSCROLL 的事件函数,望指点
------解决方案--------------------
HRESULT IHTMLElement2::get_scrollTop(long *p);
HRESULT IHTMLElement2::get_scrollLeft(long *p);
HRESULT IHTMLElement2::get_scrollWidth(long *p);
HRESULT IHTMLElement2::get_scrollHeight(long *p);
------解决方案--------------------
RESULT hr;
IDispatch *pDisp = m_cMyWebBrowser.GetDocument();
ASSERT( pDisp ); //if NULL, we failed
// 获得Html文档指针
IHTMLDocument2 *pDocument = NULL;
hr = pDisp->QueryInterface( IID_IHTMLDocument2, (void**)&pDocument );
ASSERT( SUCCEEDED( hr ) );
ASSERT( pDocument );
IHTMLElement *pBody = NULL;
hr = pDocument->get_body( &pBody );
ASSERT( SUCCEEDED( hr ) );
ASSERT( pBody );
// 从body获得IHTMLElement2接口指针,用以访问滚动条
IHTMLElement2 *pElement = NULL;
hr = pBody->QueryInterface(IID_IHTMLElement,(void**)&pElement);
ASSERT(SUCCEEDED(hr));
ASSERT( pElement );
IHTMLTextContainer *pCont;
pBody->QueryInterface(IID_IHTMLTextContainer, (LPVOID *)(&pCont));
ASSERT(pCont);
// 向下滚动100个像素
// pElement->put_scrollTop( 100 );
// 获得滚动条高度
long scroll_height;
pCont->get_scrollHeight( &scroll_height );
// 获得滚动条宽度
long scroll_width;
if(FAILED(pCont->get_scrollWidth( &scroll_width )))
AfxMessageBox("get scrollWidth failed.");
// 获得滚动条位置,从顶端开始
long scroll_top;
if(FAILED(pCont->get_scrollTop( &scroll_top )))
AfxMessageBox("get scrollWidth failed.");
// 获得滚动条位置,从左端开始
long scroll_left;
if(FAILED(pCont->get_scrollLeft( &scroll_left )))
AfxMessageBox("get scrollWidth failed.");
CString str;
str.Format("%d,%d,%d,%d",scroll_height,scroll_width,scroll_top,scroll_left);
AfxMessageBox(str);
pCont->Release();
pElement->Release();
pBody->Release();
pDocument->Release();
pDisp->Release();
Ps:如果页面中用到了
WEB标准会使ScrollTop,ScrollLeft属性失效!!! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
请问怎样捕捉WebBrowser页面的滚动条滚动事件?(急!)
------解决方案--------------------
http://community.****.net/Expert/TopicView3.asp?id=5260181
------解决方案--------------------
"我在OnDocumentComplete 中用 AfxConnectionAdvise 的方法挂接上了IHTMLWindow2 并且得到了DISPID_HTMLWINDOWEVENTS2_ONSCROLL 的事件函数。但是这个函数只能得到滚动事件的消息,而没办法得到滚动的方向和距离。 "
我的情况刚好跟他相反,能得到滚动的方向和距离,不知道怎么得到DISPID_HTMLWINDOWEVENTS2_ONSCROLL 的事件函数,望指点
------解决方案--------------------
HRESULT IHTMLElement2::get_scrollTop(long *p);
HRESULT IHTMLElement2::get_scrollLeft(long *p);
HRESULT IHTMLElement2::get_scrollWidth(long *p);
HRESULT IHTMLElement2::get_scrollHeight(long *p);
------解决方案--------------------
RESULT hr;
IDispatch *pDisp = m_cMyWebBrowser.GetDocument();
ASSERT( pDisp ); //if NULL, we failed
// 获得Html文档指针
IHTMLDocument2 *pDocument = NULL;
hr = pDisp->QueryInterface( IID_IHTMLDocument2, (void**)&pDocument );
ASSERT( SUCCEEDED( hr ) );
ASSERT( pDocument );
IHTMLElement *pBody = NULL;
hr = pDocument->get_body( &pBody );
ASSERT( SUCCEEDED( hr ) );
ASSERT( pBody );
// 从body获得IHTMLElement2接口指针,用以访问滚动条
IHTMLElement2 *pElement = NULL;
hr = pBody->QueryInterface(IID_IHTMLElement,(void**)&pElement);
ASSERT(SUCCEEDED(hr));
ASSERT( pElement );
IHTMLTextContainer *pCont;
pBody->QueryInterface(IID_IHTMLTextContainer, (LPVOID *)(&pCont));
ASSERT(pCont);
// 向下滚动100个像素
// pElement->put_scrollTop( 100 );
// 获得滚动条高度
long scroll_height;
pCont->get_scrollHeight( &scroll_height );
// 获得滚动条宽度
long scroll_width;
if(FAILED(pCont->get_scrollWidth( &scroll_width )))
AfxMessageBox("get scrollWidth failed.");
// 获得滚动条位置,从顶端开始
long scroll_top;
if(FAILED(pCont->get_scrollTop( &scroll_top )))
AfxMessageBox("get scrollWidth failed.");
// 获得滚动条位置,从左端开始
long scroll_left;
if(FAILED(pCont->get_scrollLeft( &scroll_left )))
AfxMessageBox("get scrollWidth failed.");
CString str;
str.Format("%d,%d,%d,%d",scroll_height,scroll_width,scroll_top,scroll_left);
AfxMessageBox(str);
pCont->Release();
pElement->Release();
pBody->Release();
pDocument->Release();
pDisp->Release();
Ps:如果页面中用到了
WEB标准会使ScrollTop,ScrollLeft属性失效!!! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">