'------------------- 模块文件 ------------------- 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 WM_VSCROLL = &H115 Public Const WM_MOUSEWHEEL = &H20A Public Const WHEEL_DELTA = 120 Public Const WHEEL_PAGESCROLL = 65535 Public Const WM_NCLBUTTONUP = &HA2 Public Const WM_NCLBUTTONDOWN = &HA1 Public Const WM_KEYDOWN = &H100 Public Const WM_NCCALCSIZE = &H83 Public 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
WindowProc = CallWindowProc(glDefWindowProc, hwnd, uMsg, wParam, lParam) Select Case uMsg Case WM_VSCROLL, WM_MOUSEWHEEL, WHEEL_PAGESCROLL Form1.Text1.Visible = False 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 Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) Text1.Visible = True Text1.Move Text1.Left, Item.Top 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 WM_VSCROLL = &H115
Public Const WM_MOUSEWHEEL = &H20A
Public Const WHEEL_DELTA = 120
Public Const WHEEL_PAGESCROLL = 65535
Public Const WM_NCLBUTTONUP = &HA2
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const WM_KEYDOWN = &H100
Public Const WM_NCCALCSIZE = &H83
Public 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
WindowProc = CallWindowProc(glDefWindowProc, hwnd, uMsg, wParam, lParam)
Select Case uMsg
Case WM_VSCROLL, WM_MOUSEWHEEL, WHEEL_PAGESCROLL
Form1.Text1.Visible = False
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
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
Text1.Visible = True
Text1.Move Text1.Left, Item.Top
End Sub