如何通过postmessage来修改ListView1.ListItems.Item(1).SubItems(1)的值

解决方案 »

  1.   

    有个多线程下载控件数组,在事件里面有对listview进行操作,有保护方法吗?
      

  2.   

    'code in module
    Public Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
    Private 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 Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function PostMessage Lib "user32" _
       Alias "PostMessageA" _
       (ByVal hwnd As Long, _
        ByVal wMsg As Long, _
        ByVal wParam As Long, _
        lParam As Any) As Long
        
    Public Const GWL_WNDPROC = (-4)
    Public WindowMsg As Long
    Public lPrevWndProc As Long
    Public Const SW_SHOWNORMAL = 1
    Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, _
                                  ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case Msg
            Case WindowMsg
                '处理
                Debug.Print "y"
                Form1.TreeView1.Height = 500
            Case Else
                NewWindowProc = CallWindowProc(lPrevWndProc, hwnd, Msg, wParam, lParam)
        End Select
    End Function===============================
    'code in form
    Private Sub Command1_Click()
        PostMessage TreeView1.hwnd, WindowMsg, ByVal 0&, ByVal 0&
    End SubPrivate Sub Form_Load()
        WindowMsg = RegisterWindowMessage("abcd")
        lPrevWndProc = SetWindowLong(TreeView1.hwnd, GWL_WNDPROC, AddressOf NewWindowProc)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        SetWindowLong TreeView1.hwnd, GWL_WNDPROC, lPrevWndProc
    End Sub
      

  3.   

    这个不是一个PostMessage就能解决的,而是要用N个SendMessage才可以完成。ListView的ListItem是一个个独立的对象,所以增删改,基本上互不影响。你可以在创建线程的时候,就直接将相应的ListItem交给该线程,只要不存在线程当中去访问下标,而造成交叉访问就不存在问题,你对ListSubItem进行修改不会造成问题。