问题:下面的代码可以获得鼠标点击的位置,但如果我的WebBrowser宽和高不够,有滚动条拖动,那么再获到到的X,Y的坐就不对了,谁帮忙改进一下。在WebBrowser1加载完网页的时候在网页内注入一段Java脚本代码,来绑定鼠标按下事件,并通过页面转向的方式(一个自定义的url)来传递给vb,WebBrowser1在离开当前页面前会触发WebBrowser1_BeforeNavigate2事件,我们可以在WebBrowser1_BeforeNavigate2中检测url,如果是自定义的,就分析xy 
以下代码在vb6中通过测试 Option Explicit Private Sub Form_Load() 
WebBrowser1.Navigate "www.baidu.com" 
End Sub Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)     '判断将要打开的网页的url,如果是我们自定义的mouse://协议,就进行处理 
    If Left(URL, 8) = "mouse://" Then 
        '让网页不要跳转 
        Cancel = True 
        Dim tmp, x, y 
        '过滤url 
        tmp = Replace(URL, "mouse://", "") 
        tmp = Replace(tmp, "/", "") 
        tmp = Split(tmp, "|") 
        '提取x,y坐标 
        x = tmp(0) 
        y = tmp(1) 
        Debug.Print x 
        Debug.Print y 
    End If End Sub Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) 
    On Error GoTo ToExit '打开错误陷阱 
    '------------------------------------------------ 
      
    '这里是在WebBrowser1加载网页完成后,在WebBrowser1中执行一段js脚本,用来绑定鼠标按下事件 
    '当鼠标按下以后,js会控制网页跳转到 mouse://x|y 的页面,上面的代码可以截获这个协议 
    Dim js As String 
      
    js = "document.body.onclick=function()" & vbCrLf & _ 
         "{location.href='mouse://'+window.event.x+ '|'+window.event.y;}" 
      
        WebBrowser1.Document.parentWindow.execScript js, "javascript" 
    '------------------------------------------------ 
    Exit Sub 
    '---------------- 
ToExit: 
    Resume Next 
End Sub
问题:下面的代码可以获得鼠标点击的位置,但如果我的WebBrowser宽和高不够,有滚动条拖动,那么再获到到的X,Y的坐就不对了,谁帮忙改进一下。

解决方案 »

  1.   

    将js = "document.body.onclick=function()" & vbCrLf & _ 
            "{location.href='mouse://'+window.event.x+ '|'+window.event.y;}" 中的坐标方法改为offsetX,offsetY即:
    js = "document.body.onclick=function()" & vbCrLf & _
            "{location.href='mouse://'+window.event.offsetX+ '|'+window.event.offsetY;}"
          
            WebBrowser1.Document.parentWindow.execScript js, "javascript"
    另外,还有clientX,clientY,screenX,screenY等几种方式,可以根据实际情况选用。
      

  2.   

    我发现一个问题,就是当有不同的表格组成的页面,event.offsetY这个值,或者event.y的值都不稳定,时常会变得比最上面的还小,并不是页面值的真正高,有什么办法解决这个问题吗?
      

  3.   

    clientX 设置或获取鼠标指针位置相对于窗口客户区域的 x 坐标,其中客户区域不包括窗口自身的控件和滚动条。 
    clientY 设置或获取鼠标指针位置相对于窗口客户区域的 y 坐标,其中客户区域不包括窗口自身的控件和滚动条。 
    offsetX 设置或获取鼠标指针位置相对于触发事件的对象的 x 坐标。 
    offsetY 设置或获取鼠标指针位置相对于触发事件的对象的 y 坐标。 
    screenX 设置或获取获取鼠标指针位置相对于用户屏幕的 x 坐标。 
    screenY 设置或获取鼠标指针位置相对于用户屏幕的 y 坐标。 
    x 设置或获取鼠标指针位置相对于父文档的 x 像素坐标。 
    y 设置或获取鼠标指针位置相对于父文档的 y 像素坐标。