我正在处理鼠标事件 OnMouseWheel
。许多代码示例指的是视图更改的距离(或在3D应用程序中缩放f.i.) Distance = Sign(WheelDelta)*Constant
要么 Distance = WheelDelta / WHEEL_DELTA
或者类似的东西 - 假设WheelDelta总是120的倍数(WHEEL_DELTA常数= 120)。
我已经发现在触摸界面/平板电脑输入可能取决于滚动长度。
我想知道为什么微软将默认的WheelDelta设置为120,为什么不是100或10或其他什么?在其他情况下,轮三角可能与120不同?
WHEEL_DELTA不再固定为120.据我所知,这个常数被选中以允许将来更精细的分辨率,这显然是现在。
请参阅此文章 MSDN
Qt文档详细阐述了为什么它实际上是120:
QPoint QWheelEvent :: angleDelta()const
返回轮子旋转的距离,以度数的八分之一为单位。一个
正值表示车轮向前旋转远离车轮
用户;负值表示车轮向后旋转
用户。
大多数鼠标类型以15度为单位工作,在这种情况下,delta值为
120的倍数;即,120个单位* 1/8 = 15度。
但是,有些鼠标具有更精细分辨率的轮子并发送delta值
少于120个单位(小于15度)。为了支持这种可能性,你
可以累积地从事件添加delta值,直到值120
到达,然后滚动窗口小部件,或者您可以部分滚动窗口小部件
响应每个车轮事件。
https://doc.qt.io/qt-5/qwheelevent.html#angleDelta
这个问题已标记为已回答我以为我可能会提供更多信息。
如果我理解正确,WHEEL_DELTA实际上是40而不是120,120来自鼠标驱动程序将原始WHEEL_DELTA值乘以要滚动的行数,这默认为3.您可以使用以下方式获取滚动行号
My.Computer.Mouse.WheelScrollLines
使用NumericUpDown控件可以很容易地看到这一点,该控件在滚动时通过增量乘以该行数来调整值。
只是弄乱了我的滚轮鼠标,完整的旋转中有18个棘爪,每个棘爪20度(当然我知道这是世界上一个小样本的鼠标......!)。 40表明他们认为半度足够好,尽管最后一段是假设。
编辑: 没有人传播错误信息,进一步研究WHEEL_DELTA实际上是120,NumericUpDown被证明是误报。尽管如此,如果可以将三分之一应用于逻辑,则剩下的讨论是有效的。
正如您所注意到的,笔记本电脑Touchpad可以滚动(右手大小的双指或滚动区域),在这种情况下,可能会有很多具有非常小的wheelDelta值的事件(要么需要集成,要么可能超时以防止重绘太多) 。
此外,不同的OS或配置或设备可以具有不同的滚动含义 - 像素,线条或页面。例如 DOM event.deltaMode
最后,一些设备(鼠标和触摸板)也允许水平滚动。
以上内容更具体到浏览器DOM事件,但同样的问题也可能适用于Win事件。
编辑:
来自 Firefox MDN文档 您可能感兴趣的有三个事件:WM_MOUSEWHEEL,WM_MOUSEHWHEEL和WM_GESTURE(在触摸设备上平移)。
一个 搜索Mozilla Bugzilla数据库 显示一些Symantics和ALPS触摸驱动程序发送WM_VSCROLL而不是WM_MOUSEWHEEL的各种问题(如果支持触摸板可能相关)。
如果你想要水平鼠标滚动支持, 本文 来自Flash开发人员说:[鼠标滚轮支持]已添加到Vista中,因此如果您使用的是XP或2000,则需要安装IntelliType Pro和/或IntelliPoint以支持WM_MOUSEHWHEEL。
@Krom:更多的猜测和松散的事实,但也许对其他人有用:-)