如题关于我的信誉分,我不想多说什么了,请参考http://community.csdn.net/Expert/topic/3652/3652278.xml?temp=.9394647解决问题,就结帐!平时这种控件用得很少,所以不太熟悉(一般都是用的自画控件或API)在CSDN的Q&A里也找了,没找到,Google也没有相关的资料.也许是太容易,就问都没人问吧!呵呵

解决方案 »

  1.   

    略尽绵力:
    http://www.vb-helper.com/howto_listview_popup_menu.html
      

  2.   

    你的OLE拖动模式设置成什么的?
      

  3.   

    to aohan(景升)OLE设成什么也不行呀,设成关,那就会整个ListView控件一起拖动,我都试了就是不能设成ITEM锁定,可是我看过一个DELPHI写的程序里就有这个效果
      

  4.   

    可以截获MouseMove消息'模块中的代码.
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Const GWL_WNDPROC = (-4)
    Public Const WM_MOUSEMOVE = &H200Public preWinProc As LongPublic Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If Msg <> WM_MOUSEMOVE Then
            wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
    End If
    End Function
    '窗口代码.Sub Form_Load()
    LoadlvwIcon
    Dim ret As Long
    preWinProc = GetWindowLong(ListView1.hwnd, GWL_WNDPROC) '记录原本的Window Procedure的位址
    ret = SetWindowLong(ListView1.hwnd, GWL_WNDPROC, AddressOf wndproc)   '将处理的函数地址改为自己的处理函数地址
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    Dim ret As Long
    ret = SetWindowLong(ListView1.hwnd, GWL_WNDPROC, preWinProc) '取消Message的截取,而使之又只送往原来的Window Procedure
    End Sub
    Private Sub LoadlvwIcon()
    Dim ItemX As ListItemListView1.ColumnHeaders.Clear '清除列标题
    ListView1.ListItems.ClearListView1.View = lvwIcon
    ListView1.FlatScrollBar = False '滚动条Set ItemX = ListView1.ListItems.Add(, , "第一个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第二个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第三个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第四个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第五个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第6个项目")
    End Sub
    '你参考一下吧.
      

  5.   

    To: tztz520(午夜逛街)就是这个意思了,原来这么点破事还要用到HOOK,我还以为ListView自己带了这个功能,我没找到呢,早知道就自己写了!   郁闷呀!  -_-#不过,还是要散分的,再等一等吧,看看还有没有更好的办法!
      

  6.   

    '这样呢
    Private Sub Form_Load()
    LoadlvwIcon
    End SubPrivate Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    ListView1.Tag = "1"
    End SubPrivate Sub ListView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    If ListView1.Tag = "1" Then
        ListView1.Enabled = False
        ListView1.Enabled = True
        ListView1.Tag = "0"
    Else
        If ListView1.Enabled = False Then ListView1.Enabled = True
    End If
    End SubPrivate Sub ListView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    ListView1.Tag = "0"
    End Sub
    Private Sub LoadlvwIcon()
    Dim ItemX As ListItemListView1.ColumnHeaders.Clear '清除列标题
    ListView1.ListItems.ClearListView1.View = lvwIcon
    ListView1.FlatScrollBar = False '滚动条Set ItemX = ListView1.ListItems.Add(, , "第一个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第二个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第三个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第四个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第五个项目")
    Set ItemX = ListView1.ListItems.Add(, , "第6个项目")
    End Sub
      

  7.   

    这样当然可以,可,我觉得还不如上面的HOOK呢,算了,结帐吧!  @_@