滚轮每次滚动距离是一致的吗_关于滚动条需要考虑的事儿:高精度鼠标的滚轮...

鼠标滚轮的处理

鼠标滚轮的处理会稍微棘手一点,因为在UI设计规范中,当用户滑动鼠标滚轮的时候,需要将内容视图滚动一个预定义的”量”,这里的”量”实际上是一个WHEEL_DELTA(也叫detent)的值。
在上面的需求中,有两个不容易察觉的地方:第一,具体需要滚动的量来自于一个系统设定,我们必须遵从这个设定,第二,某些鼠标会报告给操作系统:它的滚动量不是WHEEL_DELTA的整数倍。
这就尴尬了!

所谓的”半程滚动”

特别的是,存在一种可能性,某一类高精度鼠标上报的滚动量会小于WHEEL_DELTA。举个例子,考虑一种支持”half-clicks”的鼠标。当你在滑动滚轮的量位于”点击”的一半时,它会上报滚动量为 WHEEL_DELTA/2,当你继续滚动, 直到滑动量等效于一次点击时,它会再次上报剩下的WHEEL_DELTA/2。为了处理这种特别情况,你需要确保当滚动量到达一次点击时,窗口内容必须和普通低分辨率鼠标完成单个WHEEL_DELTA滚动时产生一致的表现。

为了处理上文中的第一个问题,我们会在每次收到鼠标滚轮消息的时候查询用户期望的滚动Delta值。对于第二个问题,我们可以将这些滚动消息积累起来,然后尽可能多的处理它们,为后续的滚动事件预留时间。

直接上代码

541740cdc745819c186342a02e644df6.png

/****************华丽分割****************/

df2e553841d417550a3672a42374b4d1.png

家庭作业

1) 在上述代码中,我们在计算dLines的时候,使用了一个int类型转换,为什么要怎么做?
2) 如果你手头没有一个高精度滚轮鼠标,你会如何测试半滚动时代码是否能正常工作?

总结

再一次为微软在硬件兼容性上所做的重重努力所折服,她是如此的关心你:不管你使用的是一个普通鼠标,还是一个高精度鼠标。

4c40698f7d84f3b7da4790186b3cbdc3.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值