7,765
社区成员
发帖
与我相关
我的任务
分享
鼠标点击vb窗体的标题栏触发什么事件(补偿分数的,其他勿扰) [VB 基础类] 40 yu3350360
Option Explicit
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
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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const GWL_WNDPROC = (-4)
Public prevWndProc As Long '窗口程序地址
Public Function WndProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ms:
If wParam = 2 And msg = 161 Then 'msg=161 鼠标单击 wParam:2 鼠标在标题栏上;8鼠标在最小化按钮上 9鼠标在最大化阿牛上 20 鼠标在关闭按钮上。
ClickFunction msg, wParam
Else
If msg = 164 Then
Call RightClick(msg, wParam)
Else
WndProc = CallWindowProc(prevWndProc, hwnd, msg, wParam, lParam)
End If
End If
Exit Function
ms:
MsgBox Err.Source & "-" & Err.Description
End Function
Public Function ClickFunction(ByVal msg As Long, ByVal l As Long)
Form1.Print "左键点击了标题栏,msg值为:" & msg & " wParam值为:" & l
End Function
Public Function RightClick(ByVal msg As Long, ByVal para As Long)
Form1.Print "点击了右键,Msg值为:" & msg & " wParam值为:" & para
End Function
Option Explicit
Private Sub Form_Load()
prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
End Sub
Option Explicit
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
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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const GWL_WNDPROC = (-4)
Public prevWndProc As Long '窗口程序地址
Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ms:
If wParam = 2 And Msg = 161 Then 'msg=161 鼠标单击 wParam:2 鼠标在标题栏上;8鼠标在最小化按钮上 9鼠标在最大化阿牛上 20 鼠标在关闭按钮上。
ClickFunction (wParam)
Else
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
End If
Exit Function
ms:
MsgBox Err.Source & "-" & Err.Description
End Function
Public Function ClickFunction(ByVal l As Long) '所要调用的函数。
Form1.Print "点击了标题栏:" & l
End Function