7,763
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Type POINTAPI
X As Long
Y As Long
End Type
Private bStart As String
Private Sub P1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
bStart = "P1"
End Sub
Private Sub P1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lp As POINTAPI
GetCursorPos lp
' If GetClsName(WindowFromPoint(lp.X, lp.Y)) = "ThunderPictureBoxDC" Then Text1.Text = bStart & "-P2"
Call GetClsName(WindowFromPoint(lp.X, lp.Y))
End Sub
Private Sub P2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
bStart = "P2"
End Sub
Private Sub P2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lp As POINTAPI
GetCursorPos lp
' If GetClsName(WindowFromPoint(lp.X, lp.Y)) = "AfxFrameOrView42" Then Text1.Text = bStart & "-P1"
Call GetClsName(WindowFromPoint(lp.X, lp.Y))
End Sub
Function GetClsName(ByVal bHwnd As Long) As String
Dim w1 As String
w1 = Space(255)
GetClassName bHwnd, w1, Len(w1)
GetClsName = Left$(w1, InStr(w1, Chr$(0)) - 1)
' Debug.Print GetClsName
If InStr(CStr(GetClsName), "ATL:") > 0 Then
Text1 = GetClsName
End If
End Function
我代码改成这样,我觉得达到我想要的效果了。可是问题是,P2点下然后松开再点P2也会有结果。我想要的是鼠标拖动过去才有结果。一点是鼠标没松开。Option Explicit
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Type POINTAPI
X As Long
Y As Long
End Type
Private bStart As String
Private Sub P1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
bStart = "P1"
End Sub
Private Sub P1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lp As POINTAPI
GetCursorPos lp
If GetClsName(WindowFromPoint(lp.X, lp.Y)) = "ThunderPictureBoxDC" Then Text1.Text = bStart & "-P2"
End Sub
Private Sub P2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
bStart = "P2"
End Sub
Private Sub P2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lp As POINTAPI
GetCursorPos lp
If GetClsName(WindowFromPoint(lp.X, lp.Y)) = "ThunderPictureBoxDC" Then Text1.Text = bStart & "-P1"
End Sub
Function GetClsName(ByVal bHwnd As Long) As String
Dim w1 As String
w1 = Space(255)
GetClassName bHwnd, w1, Len(w1)
GetClsName = Left$(w1, InStr(w1, Chr$(0)) - 1)
''Debug.Print GetClsName
End Function
如果你不知道你那个控件的类名,把上述代码中注释掉的代码恢复,然后运行,拖动p1到p2,查看你的立即窗口中打印出来的内容,然后替换掉上述代码中的“ThunderPictureBoxDC”即可。请参考:Option Explicit Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Type POINTAPI X As Long Y As Long End Type Private bStart As String Private Sub P1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) bStart = "P1" End Sub Private Sub P1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lp As POINTAPI GetCursorPos lp If WindowFromPoint(lp.X, lp.Y) = P2.hWnd Then Text1.Text = bStart & "-P2" End Sub Private Sub P2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) bStart = "P2" End Sub Private Sub P2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lp As POINTAPI GetCursorPos lp If WindowFromPoint(lp.X, lp.Y) = P1.hWnd Then Text1.Text = bStart & "-P1" End Sub
Option Explicit
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
X As Long
Y As Long
End Type
Private bStart As String
Private Sub P1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
bStart = "P1"
End Sub
Private Sub P1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lp As POINTAPI
GetCursorPos lp
If WindowFromPoint(lp.X, lp.Y) = P2.hWnd Then Text1.Text = bStart & "-P2"
End Sub
Private Sub P2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
bStart = "P2"
End Sub
Private Sub P2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lp As POINTAPI
GetCursorPos lp
If WindowFromPoint(lp.X, lp.Y) = P1.hWnd Then Text1.Text = bStart & "-P1"
End Sub