我有例程(确定Mouse的光标点在哪一根直线上),给我你的email发给你。

解决方案 »

  1.   

    to timeman:我的E-Mail是:[email protected],多谢了,老兄!
      

  2.   

    能给我一个吗,[email protected]
      

  3.   

    我写出来了。不知合不合用。
    Public Function PointOnLine(ByVal x, ByVal y, _
                               ByVal lx1 As Long, ByVal ly1 As Long, _
                               ByVal lx2 As Long, ByVal ly2 As Long, _
                               ByVal LWidth As Long) As Boolean
    'x,y:               点坐标  
    'lx1,ly1,lx2,ly2:    线端点坐标 
    'LWidth:             线宽,点到线距离小于线宽一半则认为在线上,该值可适当设大一些
                              
    Dim k As Single
    Dim l As Long
    Dim LHelfWidth As Long
    Dim maxx&, maxy&, minx&, miny&
    LHelfWidth = LWidth /2
    If lx1 > lx2 Then
       maxx = lx1 + LHelfWidth
       minx = lx2 - LHelfWidth
    Else
       maxx = lx2 + LHelfWidth
       minx = lx1 - LHelfWidth
    End If
    If ly1 > ly2 Then
       maxy = ly1 + LHelfWidth
       miny = ly2 - LHelfWidth
    Else
       maxy = ly2 + LHelfWidth
       miny = ly1 - LHelfWidth
    End IfIf x > minx And x < maxx Then
       If y > miny And y < maxy Then
          If lx1 - lx2 = 0 Then
             If x > lx1 - LHelfWidth And x < lx1 + LHelfWidth Then
                PointOnLine = True
             Else
                PointOnLine = False
             End If
             Exit Function
          ElseIf ly1 - ly2 = 0 Then
             If y = ly1 - LHelfWidth And y = ly1 + LHelfWidth Then
                PointOnLine = True
             Else
                PointOnLine = False
             End If
             Exit Function
          Else
             k = (ly1 - ly2) / (lx1 - lx2)
             If Abs(k) > 5 Then
                l = Abs(y - k * x - (ly1 - k * lx1)) / Abs(k)
             Else
                l = Abs(y - k * x - (ly1 - k * lx1)) / Sqr(k * k + 1)
             End If
             If l - 50 < LHelfWidth Then
                PointOnLine = True
             Else
                PointOnLine = False
             End If
             Exit Function
          End If
       Else
          PointOnLine = False
       End If
    Else
       PointOnLine = False
    End If
    End Function
      

  4.   

    记下点击位置,再看看哪条line的坐标与之相符。
      

  5.   

    使用API函数LineDDA,
    Declare Function LineDDA Lib "gdi32" (ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal lpLineDDAProc As Long, ByVal lParam As Long) As Long
    n1,n2和n3,n4是线的两端坐标,ipLineDDAproc是lineDDA的CallBack函数地址......这么着吧,看王国荣的windows api讲座,里面有里程