鼠标滾輪的處理會稍微棘手一點,因為在UI設計規範中,當用戶滑動鼠标滾輪的時候,需要将内容視圖滾動一個預定義的”量”,這裡的”量”實際上是一個WHEEL_DELTA(也叫detent)的值。
在上面的需求中,有兩個不容易察覺的地方:第一,具體需要滾動的量來自于一個系統設定,我們必須遵從這個設定,第二,某些鼠标會報告給操作系統:它的滾動量不是WHEEL_DELTA的整數倍。
這就尴尬了!
特别的是,存在一種可能性,某一類高精度鼠标上報的滾動量會小于WHEEL_DELTA。舉個例子,考慮一種支持”half-clicks”的鼠标。當你在滑動滾輪的量位于”點擊”的一半時,它會上報滾動量為 WHEEL_DELTA/2,當你繼續滾動, 直到滑動量等效于一次點擊時,它會再次上報剩下的WHEEL_DELTA/2。為了處理這種特别情況,你需要确保當滾動量到達一次點擊時,窗口内容必須和普通低分辨率鼠标完成單個WHEEL_DELTA滾動時産生一緻的表現。
為了處理上文中的第一個問題,我們會在每次收到鼠标滾輪消息的時候查詢用戶期望的滾動Delta值。對于第二個問題,我們可以将這些滾動消息積累起來,然後盡可能多的處理它們,為後續的滾動事件預留時間。
直接上代碼
/****************華麗分割****************/
家庭作業
1) 在上述代碼中,我們在計算dLines的時候,使用了一個int類型轉換,為什麼要怎麼做?
2) 如果你手頭沒有一個高精度滾輪鼠标,你會如何測試半滾動時代碼是否能正常工作?
再一次為微軟在硬件兼容性上所做的重重努力所折服,她是如此的關心你:不管你使用的是一個普通鼠标,還是一個高精度鼠标。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!