'------------------- 窗体 ------------------- Option ExplicitPrivate Sub Form_Load() Dim i As Long Dim oItem As ListItem
Dim hwnd As Long 'Call InitExceptionHandler
For i = 1 To 100 Set oItem = ListView1.ListItems.Add(, , i) oItem.SubItems(1) = i Next
hwnd = ListView1.hwnd
'子类处理 glDefWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Private Sub Form_Unload(Cancel As Integer)
If glDefWindowProc Then '结束子类处理 SetWindowLong ListView1.hwnd, GWL_WNDPROC, glDefWindowProc glDefWindowProc = 0 End If End Sub '------------------- 模块文件 ------------------- Option ExplicitPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Const GWL_WNDPROC = (-4) Public Const GCL_WNDPROC = (-24)Public Const LVM_FIRST As Long = &H1000 Public Const LVM_SETITEMPOSITION As Long = LVM_FIRST + 15 Public Const LVM_SETITEMPOSITION32 As Long = LVM_FIRST + 49Public glDefWindowProc As LongPublic Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long On Error Resume Next Select Case uMsg Case LVM_SETITEMPOSITION, LVM_SETITEMPOSITION32 WindowProc = 0 Case Else WindowProc = CallWindowProc(glDefWindowProc, hwnd, uMsg, wParam, lParam) End Select End Function
Option ExplicitPrivate Sub Form_Load()
Dim i As Long
Dim oItem As ListItem
Dim hwnd As Long
'Call InitExceptionHandler
For i = 1 To 100
Set oItem = ListView1.ListItems.Add(, , i)
oItem.SubItems(1) = i
Next
hwnd = ListView1.hwnd
'子类处理
glDefWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
If glDefWindowProc Then
'结束子类处理
SetWindowLong ListView1.hwnd, GWL_WNDPROC, glDefWindowProc
glDefWindowProc = 0
End If
End Sub
'------------------- 模块文件 -------------------
Option ExplicitPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const GCL_WNDPROC = (-24)Public Const LVM_FIRST As Long = &H1000
Public Const LVM_SETITEMPOSITION As Long = LVM_FIRST + 15
Public Const LVM_SETITEMPOSITION32 As Long = LVM_FIRST + 49Public glDefWindowProc As LongPublic Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next
Select Case uMsg
Case LVM_SETITEMPOSITION, LVM_SETITEMPOSITION32
WindowProc = 0
Case Else
WindowProc = CallWindowProc(glDefWindowProc, hwnd, uMsg, wParam, lParam)
End Select
End Function