1 子类化ListView窗口 2 处理WM_NOTIFY 3 屏蔽HDN_BEGINTRACKA,HDN_BEGINTRACKW,HDN_DIVIDERDBLCLICKA,HDN_DIVIDERDBLCLICKW ................................ Case WM_NOTIFY Dim x As NMHDR
CopyMemory x, ByVal lParam, Len(x)
If x.code = HDN_BEGINTRACKA Or x.code = HDN_BEGINTRACKW Or _ x.code = HDN_DIVIDERDBLCLICKA Or x.code = HDN_DIVIDERDBLCLICKW Then WindowProc = 1 Exit Function End If
................................
bbe()兄,能否给个完整的代码?我对这块不太熟悉。
'ModuleOption ExplicitPublic Type NMHDR hwndFrom As Long idFrom As Long code As Long End TypePublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public 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 Const GWL_WNDPROC = (-4) Public Const WM_NOTIFY = &H4EPublic Const HDN_FIRST = -300 Public Const HDN_DIVIDERDBLCLICKA = HDN_FIRST - 5 Public Const HDN_DIVIDERDBLCLICKW = HDN_FIRST - 25 Public Const HDN_BEGINTRACKA = HDN_FIRST - 6 Public Const HDN_BEGINTRACKW = HDN_FIRST - 26Private lpPrevWndFunc As LongPublic Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case uMsg Case WM_NOTIFY Dim x As NMHDR
CopyMemory x, ByVal lParam, Len(x)
If x.code = HDN_BEGINTRACKA Or x.code = HDN_BEGINTRACKW Or _ x.code = HDN_DIVIDERDBLCLICKA Or _ x.code = HDN_DIVIDERDBLCLICKW Then WindowProc = 1 Exit Function End If End Select
WindowProc = CallWindowProc(lpPrevWndFunc, hwnd, uMsg, wParam, lParam) End FunctionPublic Sub LockHead(ByVal hwnd As Long) lpPrevWndFunc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub UnLockHead(ByVal hwnd As Long) SetWindowLong hwnd, GWL_WNDPROC, lpPrevWndFunc End Sub 'FormOption Explicit Private Sub Command1_Click() Call LockHead(ListView1.hwnd) End SubPrivate Sub Command2_Click() Call UnLockHead(ListView1.hwnd) End Sub
2 处理WM_NOTIFY
3 屏蔽HDN_BEGINTRACKA,HDN_BEGINTRACKW,HDN_DIVIDERDBLCLICKA,HDN_DIVIDERDBLCLICKW ................................
Case WM_NOTIFY
Dim x As NMHDR
CopyMemory x, ByVal lParam, Len(x)
If x.code = HDN_BEGINTRACKA Or x.code = HDN_BEGINTRACKW Or _
x.code = HDN_DIVIDERDBLCLICKA Or x.code = HDN_DIVIDERDBLCLICKW Then
WindowProc = 1
Exit Function
End If
................................
hwndFrom As Long
idFrom As Long
code As Long
End TypePublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public 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 Const GWL_WNDPROC = (-4)
Public Const WM_NOTIFY = &H4EPublic Const HDN_FIRST = -300
Public Const HDN_DIVIDERDBLCLICKA = HDN_FIRST - 5
Public Const HDN_DIVIDERDBLCLICKW = HDN_FIRST - 25
Public Const HDN_BEGINTRACKA = HDN_FIRST - 6
Public Const HDN_BEGINTRACKW = HDN_FIRST - 26Private lpPrevWndFunc As LongPublic Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_NOTIFY
Dim x As NMHDR
CopyMemory x, ByVal lParam, Len(x)
If x.code = HDN_BEGINTRACKA Or x.code = HDN_BEGINTRACKW Or _
x.code = HDN_DIVIDERDBLCLICKA Or _
x.code = HDN_DIVIDERDBLCLICKW Then
WindowProc = 1
Exit Function
End If
End Select
WindowProc = CallWindowProc(lpPrevWndFunc, hwnd, uMsg, wParam, lParam)
End FunctionPublic Sub LockHead(ByVal hwnd As Long)
lpPrevWndFunc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnLockHead(ByVal hwnd As Long)
SetWindowLong hwnd, GWL_WNDPROC, lpPrevWndFunc
End Sub
'FormOption Explicit
Private Sub Command1_Click()
Call LockHead(ListView1.hwnd)
End SubPrivate Sub Command2_Click()
Call UnLockHead(ListView1.hwnd)
End Sub