developer's diary

最近はc#のエントリが多いです

<.net forms>OnMouseWheelイベントのe.Deltaはなぜ120なのか。(MouseWheelScrollDelta、WHEEL_DELTA )

OnMouseWheelのe.Deltaはなぜ120なのか。 と思い調べたら、「なぜか?」に対する答えを見つけた。

なぜかは↓に書いてました。

Why was WHEEL_DELTA chosen to be 120 instead of a much more convenient value like 100 or even 10? – The Old New Thing

マウスのホイールを「カチッと」

一般的なマウスだとスクロールを1回「カチッと」動かすと、OnMouseWheelというイベントが動いて、120という数字か、-120という数字が渡される。

スクロールを勢いよく動かすと、240とか480とかが渡されます。

その120という数字を基準に、プログラムは組まれてます。

120より小さい数字を渡すことができる

マウスのハードウェア側で、1回の「カチッと」で60を送るようにした場合、2回「カチッと」動かすと1回分動くことになる。

3回「カチッと」動かして1回分動かそうとするのであれば、120/3で40を渡せばよいことになる。

こんな感じでハードウェア側で対応しようとすると渡す値は下記表になる。

カチッと回数 120に変わる値 備考
1 120
2 60
3 40
4 30
5 24
6 20
7 17.142・・・  NG 
8 15
9 13.333・・・ NG 
10 12
11 10.909・・・ NG
12 10
24 5 時間に使えそう

ハードウェア側が繊細になれば、「カチッと」で動く量を少なくすることが出来るということらしい。

120ではなく、10だったら。

10/3は3.33333・・・となるので、3回で1回分の「カチッと」が実現できない。

ちょうどよい値が120だったということ。

定数

.net の場合は、WHEEL_DELTA か MouseWheelScrollDeltaを使いましょう。

↓WHEEL_DELTA ↓

Reference Source

↓MouseWheelScrollDelta↓

Reference Source