rt

解决方案 »

  1.   

    首先取到框架中的IHtmlWindow然后使用 IHTMLWindow2::onscroll属性 , 设置事件触发
      

  2.   

    http://topic.csdn.net/u/20080324/09/ae8fdac9-fbb9-4805-afd1-05f55c7fe674.html
      

  3.   


    DISP_FUNCTION_ID(CXX, "onscroll",DISPID_HTMLWINDOWEVENTS2_ONSCROLL, OnIFrameScroll,VT_EMPTY, VTS_DISPATCH)AfxConnectionAdvise((LPUNKNOWN)pHTMLWnd2,DIID_HTMLWindowEvents2, GetIDispatch(FALSE), FALSE, &m_dwCookie);void OnIFrameScroll(IHTMLEventObj *pEvtObj);没反应啊!!!,截获不到
      

  4.   

    我写了个sample给你1.html<HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
     </HEAD> <BODY>
    <iframe id="ifmMain" style="width:100%; height:100%" src="2.html">
    </iframe>
     </BODY>
    </HTML>
    2.html
    <HTML>
     <BODY>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
     </BODY>
    </HTML>
    3. vc代码void CTestHtmlViewView::OnDocumentComplete(LPCTSTR lpszURL)
    {
    static BOOL s_bHooked = FALSE;
    if( !s_bHooked )
    {
    CComQIPtr<IHTMLDocument2> pDoc2(GetHtmlDocument());
    if( pDoc2 )
    {
    CComPtr<IHTMLFramesCollection2> pColl2;
    pDoc2->get_frames(&pColl2); if( pColl2 )
    {
    LONG lCount = 0L;
    pColl2->get_length(&lCount); if( lCount > 0 )
    {
    _variant_t vIndex(0);
    _variant_t vOut;
    pColl2->item( &vIndex, &vOut); CComQIPtr<IHTMLWindow3> pWnd3(vOut.pdispVal); if( pWnd3 )
    {
    VARIANT_BOOL vbSuccess = VARIANT_FALSE;
    pWnd3->attachEvent( _bstr_t(_T("onscroll"))
    , CDOMEventHandler::CreateEventHandler( &CTestHtmlViewView::OnScroll, (LONG_PTR)this)
    , &vbSuccess
    );
    s_bHooked = TRUE;
    }
    }

    }
    }
    }
    }
    其中CTestHtmlViewView::OnScroll的定义和代码为static void OnScroll(VARIANT* pVarResult, LONG_PTR lpUserData);void CTestHtmlViewView::OnScroll(VARIANT* pVarResult, LONG_PTR lpUserData)
    {
    CTestHtmlViewView * pThis = reinterpret_cast<CTestHtmlViewView*>(lpUserData);
    ::MessageBox( NULL, _T("OnScroll"), NULL, MB_OK);
    }
    CDOMEventHandler这个类去我的博客里面找
      

  5.   


    Are you sure??  
    Did u try my sample with the HTML code list above.Make sure no XHtml Doc-type is presented in the head of your HTML.
    NOTE: it is impossible for u to hook the onscroll in XHTML instead of HTML
      

  6.   

    必须使用这个类CDOMEventHandler吗?
    能不能直接写一个事件的处理函数在CHTMLVIEW类中,用IHTMLWINDOW3::ATTACHEVENT来实现绑定