ListBox:怎樣可以在MouseDown事件中if Button=2時,選中一個Item(Mouse的當前位置)???????在線waiting!!!!萬分火急!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    这个不难,SENDMESSAGE可以实现:
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
      (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
        lParam As Any) As Long
    Private Sub Form_Load()
    For i = 1 To 100
    List1.AddItem i
    Next
    End SubPrivate Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Dim lX As Long
        Dim lY As Long
        Dim lIndex As Long
            lX = CLng(X / Screen.TwipsPerPixelX)
            lY = CLng(Y / Screen.TwipsPerPixelY)
                lIndex = SendMessage(List1.hwnd, &H1A9, 0, _
                ByVal ((lY * 65536) + lX))
    If Button = 2 Then
     List1.SetFocus
                If lIndex >= 0 And lIndex <= List1.ListCount Then
             List1.Selected(lIndex) = True    End If
    End If
    End Sub
      

  2.   

    northwolves,
    厲害啊!~
    高手,佩服佩服.非常感謝!
    不過我這調用了另一個API,通過模擬左鍵也能實現這個功能:Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)Private Const MOUSEEVENTF_RIGHTDOWN = &H8 '  right button down
    Private Const MOUSEEVENTF_RIGHTUP = &H10 '  right button upPrivate Sub List1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        If Button = vbRightButton Then        
            Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
            Call mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
            DoEvents
        End If
    End Sub也挺麻煩的,以後還請你多多指教嘍!
      

  3.   

    应是leftup,leftdownPrivate Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    Private Const MOUSEEVENTF_LEFTUP = &H4 '  left button up
    Private Const MOUSEEVENTF_LEFTDOWN = &H2 '  left button down
    Private Sub List1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        If Button = vbRightButton Then
          Call mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
           DoEvents
        End If
    End Sub