`
mmdev
  • 浏览: 13304349 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

鼠标滚轮消息的捕捉

 
阅读更多

'*************************************************************************
'**模 块 名:basMouse
'**创 建 人:叶帆
'**日 期:2002年12月31日
'**修 改 人:
'**日 期:
'**描 述:鼠标钩子
'**版 本:版本1.0
'*************************************************************************
Option Explicit
Public Type POINTL
X As Long
Y As Long
End Type
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 SystemParametersInfo Lib "USER32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
Declare Function ScreenToClient Lib "USER32" (ByVal hWnd As Long, xyPoint As POINTL) As Long

Public Const GWL_WNDPROC = -4
Public Const SPI_GETWHEELSCROLLLINES = 104
Public Const WM_MOUSEWHEEL = &H20A
Public WHEEL_SCROLL_LINES As Long

Global lpPrevWndProc As Long

Public sngX As Single, sngY As Single '鼠标坐标
Public intShift As Integer '鼠标按键
Public bWay As Boolean '鼠标方向
Public bMouseFlag As Boolean '鼠标事件激活标志

'*************************************************************************
'**函 数 名:Hook
'**输 入:ByVal hWnd(Long) - 窗口句柄
'**输 出:无
'**功能描述:安装鼠标钩子
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2002年12月31日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Sub Hook(ByVal hWnd As Long)
lpPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
'获取"控制面板"中的滚动行数值
Call SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, WHEEL_SCROLL_LINES, 0)
End Sub

'*************************************************************************
'**函 数 名:UnHook
'**输 入:ByVal hWnd(Long) - 窗口句柄
'**输 出:无
'**功能描述:卸载鼠标钩子
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2002年12月31日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Sub UnHook(ByVal hWnd As Long)
Dim lngReturnValue As Long
lngReturnValue = SetWindowLong(hWnd, GWL_WNDPROC, lpPrevWndProc)
End Sub

'*************************************************************************
'**函 数 名:WindowProc
'**输 入:ByVal hw(Long) - 窗口句柄
'** :ByVal uMsg(Long) - 消息类型
'** :ByVal wParam(Long) -
'** :ByVal lParam(Long) -
'**输 出:(Long) -
'**功能描述:窗口函数
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2002年12月31日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Private Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim pt As POINTL
Select Case uMsg
Case WM_MOUSEWHEEL '滚动
Dim wzDelta, wKeys As Integer

'wzDelta传递滚轮滚动的快慢,该值小于零表示滚轮向后滚动(朝用户方向),
'大于零表示滚轮向前滚动(朝显示器方向)
wzDelta = HIWORD(wParam)

'wKeys指出是否有CTRL=8、SHIFT=4、鼠标键(左=2、中=16、右=2、附加)按下,允许复合
wKeys = LOWORD(wParam)

'pt鼠标的坐标
pt.X = LOWORD(lParam)
pt.Y = HIWORD(lParam)

'--------------------------------------------------
If wzDelta < 0 Then '朝用户方向
bWay = True
Else '朝显示器方向
bWay = False
End If
'--------------------------------------------------
'将屏幕坐标转换为Form1.窗口坐标
ScreenToClient hw, pt
sngX = pt.X
sngY = pt.Y
intShift = wKeys

bMouseFlag = True '置滚动标志
Case Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Select
End Function

'*************************************************************************
'**函 数 名:HIWORD
'**输 入:LongIn(Long) - 32位值
'**输 出:(Integer) - 32位值的低16位
'**功能描述:取出32位值的高16位
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2002年12月31日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Function HIWORD(LongIn As Long) As Integer
' 取出32位值的高16位
HIWORD = (LongIn And &HFFFF0000) / &H10000
End Function

'*************************************************************************
'**函 数 名:LOWORD
'**输 入:LongIn(Long) - 32位值
'**输 出:(Integer) - 32位值的低16位
'**功能描述:取出32位值的低16位
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2002年12月31日
'**修 改 人:
'**日 期:
'**版 本:版本1.0
'*************************************************************************
Public Function LOWORD(LongIn As Long) As Integer
' 取出32位值的低16位
LOWORD = LongIn And &HFFFF&
End Function

分享到:
评论

相关推荐

    VB6内 响应鼠标滚轮事件 使用Hook

    在VB6(Visual Basic 6.0)编程环境中,响应鼠标滚轮事件通常是通过系统消息机制来实现的,因为VB6本身并不直接提供内置的滚轮事件处理。在这个过程中,开发者通常会使用一种称为"Hook"的技术来捕获并处理特定的...

    jquery监听鼠标滚轮事件+js监听滚轮事件

    在网页开发中,用户与页面交互的一个重要方式是使用鼠标滚轮进行滚动操作。为了捕捉这一行为并根据需要做出响应,开发者通常会使用JavaScript或jQuery来监听滚轮事件。本篇将详细介绍如何使用jQuery和原生JavaScript...

    EXCEL VBA 控件响应鼠标滚轮操作 循环滚动候选项

    该工作簿内包含一个 MouseWheel 模块,该模块捕捉了鼠标滚轮事件,并通过hook钩子使其达到操作 combox 或者 listbox 变更选项的目的。 该模块可以实现通过鼠标滚轮控制 comBox/listBox 内的选择项向前或者向后滚动...

    鼠标滚轮控制 combox/listbox 控件选项演示

    这是一个还有宏的 excel 工作簿,这是一个 xlsm 文档。该工作簿内实现了通过鼠标...该工作簿内包含一个 MouseWheel 模块,该模块捕捉了鼠标滚轮事件,并通过hook钩子使其达到操作 combox 或者 listbox 变更选项的目的。

    jquery鼠标滚轮事件

    总的来说,jQuery的鼠标滚轮事件是Web开发中的一个重要工具,它帮助开发者轻松地捕捉用户的滚动行为,进而实现更加个性化的网页交互。通过熟练掌握和应用这些知识点,你可以在项目中创造出更佳的用户体验。

    VB鼠标滚轮驱动下载

    在VB(Visual Basic)编程环境中,开发者经常需要与...通过以上方法,VB开发者可以在其应用程序中实现对鼠标滚轮事件的捕捉和处理,为用户提供更丰富的交互体验。在实际项目中,可以根据具体需求进一步封装和优化代码。

    VB监控鼠标滚轮

    标题中的“VB监控鼠标滚轮”指的是在Visual Basic (VB)编程环境中,通过编写代码来实现对鼠标滚轮事件的监听和处理。VB是Microsoft开发的一种面向对象的编程语言,常用于开发桌面应用程序。在VB中,我们可以利用事件...

    Visual Studio C# WPF 2017鼠标滚轮实现放大缩小源码大全2021-07-26.rar

    在本文中,我们将深入探讨如何在Visual Studio 2017中使用C#和WPF(Windows Presentation Foundation)框架通过鼠标滚轮实现图形或界面的放大与缩小功能。这一技术在许多应用程序中都非常实用,例如图像查看器、地图...

    支持鼠标滚轮放大缩小的js点击弹出图片展示代码

    在这个场景中,我们讨论的是一款利用JavaScript实现的图片展示代码,它具有鼠标滚轮放大缩小以及图片切换的功能。这个功能在网站设计中十分常见,特别是在产品展示、画廊或者相册应用中,能够提供更丰富的用户体验。...

    用鼠标滚轮控制图片的缩放

    "用鼠标滚轮控制图片的缩放"是一个常见的用户界面增强功能,它能够提供更直观、更便捷的图片查看体验。本知识点将深入探讨如何实现这一功能,主要涉及Windows Forms或WPF等桌面应用开发环境。 首先,我们要理解的是...

    winform键盘和鼠标事件的捕捉与重写(快捷键)

    本文将深入探讨如何在Winform应用中处理键盘输入事件、鼠标滚轮事件,并实现快捷键功能。 1. 键盘事件处理: - `KeyDown`事件:当用户按下键盘上的一个键时,此事件会被触发。可以通过检查`EventArgs`对象的`Key`...

    怎样捕捉鼠标键盘按键

    在IT领域,捕捉鼠标键盘按键是一项常见的需求,尤其在软件开发、自动化测试、游戏编程以及监控用户行为等场景中。本文将深入探讨如何在不同环境下实现这一功能,并提供相关技术的详细解析。 首先,我们要明白捕获...

    VC++消息映射与处理\在视图窗口实现捕捉鼠标

    除了基本的鼠标事件,你还可以处理其他高级事件,如双击(WM_LBUTTONDBLCLK)、滚轮滚动(WM_MOUSEWHEEL)等。此外,还可以利用`CWnd::GetCapture()`检查当前是否已捕获鼠标,以及`CWnd::SetCapture()`和`...

    按键C++版的滚轮

    在Windows操作系统中,实现按键C++版的滚轮消息按键需要使用Windows API中的钩子函数来捕捉鼠标事件。在本文中,我们将详细介绍如何使用C++语言来实现按键C++版的滚轮消息按键。 首先,我们需要在DLL中定义一个钩子...

    vc消息捕捉.rar_VC 鼠标_vc 娑堟伅_消息_键盘_键盘 vc

    在VC++编程环境中,消息捕捉是一项重要的功能,它允许开发者获取和处理来自用户输入(如鼠标点击和键盘按键)以及系统级别的事件。标题"vc消息捕捉.rar_VC 鼠标_vc 娑堟伅_消息_键盘_键盘 vc"暗示了这个压缩包包含的...

    让MSFlexgrid支持鼠标滚动

    然而,默认情况下,`MSFlexgrid` 并不支持鼠标滚轮操作,这对于用户来说可能会造成一定的不便。为了改善用户体验,可以通过编写额外的代码来为`MSFlexgrid`添加对鼠标滚轮的支持。 #### 实现原理 在实现这一功能的...

    鼠标滚轮控制图片切换效果代码.zip

    在前端开发中,实现鼠标滚轮控制图片切换的效果是一种常见的交互设计,它可以提供用户更直观、流畅的操作体验。本项目中,“鼠标滚轮控制图片切换效果代码”利用了JavaScript库jQuery,结合HTML5、CSS以及JavaScript...

    jQuery 鼠标滚轮插件 mousewheel

    2.它提供了两个很有帮助事件mousewheel和unmousewheel来封装了滚轮的事件:使用方法如下: //绑定mousewheel事件 $('#my_elem').on('mousewheel', function(event) { console.log(event.deltaX, event.deltaY, ...

    VC++获取鼠标移动信息

    6. **鼠标滚轮处理**: - 滚轮的滚动信息可以通过`WM_MOUSEWHEEL`消息获取,`wParam`的高16位包含滚动的增量,可以使用`HIWORD`宏提取。 7. **鼠标捕获**: - 使用`SetCapture`函数可以捕获鼠标,即使鼠标离开...

    VC++基本鼠标操作——判断鼠标消息

    8. **WM_MOUSEWHEEL**: 鼠标滚轮滚动时发出。 处理这些消息通常在窗口过程(`WndProc`)函数中进行,我们需要重写这个函数来捕获和处理鼠标消息。例如,你可以这样检查是否接收到左键单击消息: ```cpp LRESULT ...

Global site tag (gtag.js) - Google Analytics