如何让treeview拖动接点时,如果超出视图范围时,scroll自动滚动

解决方案 »

  1.   

    我不知道鼠标能不能捕获当前的node,不然的话,就使它选中就不完事了么,那就滚动了
      

  2.   

    Const SB_LINEDOWN = 3
    Const SB_LINEUP = 2
    Const WM_HSCROLL = &H114
    Const WM_VSCROLL = &H115
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As LongPrivate Sub tvwLayer_OLEDragOver(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single, State As Integer)    If y > 0 And y < 30 Then
            m_iScrollDir = -1
            Timer1.Enabled = True
        ElseIf y > (tvwLayer.Height - 30) And _
            y < tvwLayer.Height Then
            m_iScrollDir = 1
            Timer1.Enabled = True
        Else
            m_iScrollDir = 0
            Timer1.Enabled = False
        End If
    End SubPrivate Sub Timer1_Timer()
        If m_iScrollDir = 1 Then
            '向下滚动
            SendMessage tvwLayer.hwnd, WM_VSCROLL, SB_LINEDOWN, ByVal 0&
        ElseIf m_iScrollDir = -1 Then
            '向上滚动
            SendMessage tvwLayer.hwnd, WM_VSCROLL, SB_LINEUP, ByVal 0&
        End If
    End Sub