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