Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 为什么WheelDelta=120?_Winapi_Mousewheel - Fatal编程技术网

Winapi 为什么WheelDelta=120?

Winapi 为什么WheelDelta=120?,winapi,mousewheel,Winapi,Mousewheel,我正在处理鼠标事件,特别是onmouseheel。许多代码示例将视图更改的距离(或3D应用程序中的缩放f.i.)称为距离=符号(WheelDelta)*常数或距离=WheelDelta/WHEEL_DELTA或类似的值-假设WheelDelta始终是120的倍数(WHEEL_DELTA常数=120) 我已经发现触控界面/平板电脑输入可能取决于滚动长度 我想知道为什么微软把默认的WheelDelta设置为120,为什么不设置为100或10或其他什么?在其他哪些情况下,车轮三角洲可能与120有所不同

我正在处理鼠标事件,特别是
onmouseheel
。许多代码示例将视图更改的距离(或3D应用程序中的缩放f.i.)称为
距离=符号(WheelDelta)*常数
距离=WheelDelta/WHEEL_DELTA
或类似的值-假设WheelDelta始终是120的倍数(WHEEL_DELTA常数=120)

我已经发现触控界面/平板电脑输入可能取决于滚动长度


我想知道为什么微软把默认的WheelDelta设置为120,为什么不设置为100或10或其他什么?在其他哪些情况下,车轮三角洲可能与120有所不同?

车轮三角洲不再固定为120。据我所知,选择这个常数是为了在将来获得更好的分辨率,而现在显然是这样


请参阅

中的这篇文章。问题已标记为已回答。我想我可能会提供更多信息

如果我理解正确,WHEEL_DELTA实际上是40而不是120,120来自鼠标驱动程序将原始WHEEL_DELTA值乘以要滚动的行数,默认情况下为3。您可以使用以下命令获取滚动行号:

My.Computer.Mouse.WheelScrollLines
使用NumericUpDown控件可以很容易地看到这一点,该控件在滚动时通过增量乘以行数来调整值

只是搞乱了我的滚轮鼠标,一整圈有18个卡位,每个卡位20度(当然我知道这是世界上一个很小的鼠标样本大小…!)。40表示他们觉得半度就足够了,尽管最后一段是假设


编辑:不是传播错误信息的人,在进一步研究中,车轮δ实际上是120,数字上下被证明是假阳性。尽管如此,如果可以对逻辑应用3的系数,那么其余的讨论是有效的。

正如您所注意到的,笔记本电脑触摸板可以滚动(两个手指或右手大小的滚动区域),在这种情况下,可能会有很多事件,其wheelDelta值非常小(或者需要集成,或者可能需要超时以防止过多的重画)

另外,不同的操作系统、配置或设备对滚动也有不同的含义——像素、行或页面

最后,一些设备(鼠标和触摸板)也允许水平滚动

以上内容更具体地针对浏览器DOM事件,但同样的问题也可能适用于Win事件

编辑:

从中,您可能会对三个事件感兴趣:WM_鼠标滚轮、WM_鼠标滚轮和WM_手势(在触摸设备上平移)

A显示了一些Symantics和ALPS touch驱动程序发送WM_VSCROLL而不是WM_MOUSEWHEEL时出现的各种问题(如果支持触摸板,则可能相关)

如果您想要水平鼠标滚动支持,flash开发人员会说:[鼠标滚轮支持]是在Vista中添加的,因此如果您使用XP或2000,则需要安装IntelliType Pro和/或IntelliPoint以支持WM_鼠标滚轮


@克罗姆:更多的猜测和松散的事实,但可能对其他人有用:-)

Qt文档详细阐述了为什么它实际上是120:

QPoint QWheelEvent::angleDelta()常量 返回轮子旋转的距离,以八分之一度为单位。A. 正值表示车轮已向前旋转,远离车轮 用户;负值表示车轮已向后旋转 用户

大多数鼠标类型以15度的步长工作,在这种情况下,增量值为 120的倍数;i、 例如,120个单位*1/8=15度

但是,有些鼠标具有更高分辨率的控制盘,并发送 小于120个单位(小于15度)。为了支持这种可能性,你 可以累计添加事件的增量值,直到值为120 ,然后滚动小部件,或者您可以在中部分滚动小部件 对每个车轮事件的响应


120被选中,因为它的因子大于100。在Delphi.Windows.pas中,DELTA=120;我猜如果你将WheelScrollLines设置为4,它将变为4,但与WheelDelta的连接将保持120。因此,我最初的问题是:)是的,我把那个修正放在那里,它总是120。我想我的主要思想实际上是关于可除性的,因为就像度角一样,120可以被一组不同的数字平均除。在WinUser.h中有#define WHEEL_DELTA 120。@J Collins这也是为什么一英尺有12英寸的原因。我在这里没有看到答案,只是一些推测和松散相关的事实。来自WM_MOUSEWHEEL()上的MSDN文档:“增量设置为120,以允许Microsoft或其他供应商构建更精细的分辨率控制盘(一个无凹口的自由旋转控制盘)每次旋转发送更多消息,但每个消息中的值较小。若要使用此功能,您可以添加传入的增量值,直到达到轮_delta(因此对于增量旋转,您会得到相同的响应),或者滚动部分行以响应更频繁的消息。”更新了WM_MOUSEWHEEL的MSDN链接:WHEEL_DELTA将一如既往地扩展到120。它的定义没有改变。它的含义也没有改变。它是对应于一个槽口(在有槽口的车轮上)的增量值。delta小于WHEEL_delta表示通过小于完整槽口的转弯。+1,但这仍然不能回答为什么选择1/8而不是1/10或1/2。我可以猜测,您需要3位来表示8个值<代码>0..7。这也许可以解释为什么不使用1/10。我猜
1/2
没有被使用,因为它不够细粒度。然而,我只是猜测,我真的不知道。