Почему WheelDelta = 120?

Я работаю с событиями мыши, в частности OnMouseWheel. Многие примеры кода относятся к расстоянию изменения вида (или zoom fi в 3D-приложении) как Distance = Sign(WheelDelta)*Constant или Distance = WheelDelta / WHEEL_DELTA или что-то в этом роде - при условии, что WheelDelta всегда кратно 120 (WHEEL_DELTA constant = 120).

Я уже обнаружил, что в интерфейсах сенсорных интерфейсов/таблиц может зависеть длина прокрутки.

Мне было интересно, почему Microsoft установила default WheelDelta на 120, почему не 100 или 10 или что-нибудь еще? В каких других случаях дельта колеса может быть чем-то отличным от 120?

Ответ 1

WHEEL_DELTA больше не фиксируется до 120. Насколько я понимаю, эта константа была выбрана для обеспечения более тонких разрешений в будущем, что, очевидно, СЕЙЧАС.

См. статью из MSDN

Ответ 2

Документация Qt более подробно описывает, почему на самом деле это 120:

int QGraphicsSceneWheelEvent::delta () const

Возвращает расстояние, на которое вращается колесо, в восьмой (1/8 с) степень. Положительное значение указывает на то, что колесо повернулось вперед от пользователя; отрицательное значение указывает, что колесо было поворачивается назад к пользователю.     Большинство типов мышей работают с шагом 15 градусов, и в этом случае значение дельта кратно 120 (== 15 * 8).

http://doc.qt.digia.com/4.7/qgraphicsscenewheelevent.html#delta

Ответ 3

Вопрос отмечен как ответ уже, я подумал, что могу предоставить дополнительную информацию.

Если я правильно понимаю, WHEEL_DELTA на самом деле 40 не 120, 120 поступает из драйвера мыши, умножая исходное значение WHEEL_DELTA на количество строк для прокрутки, которое по умолчанию 3. Вы можете получить номер строки прокрутки, используя

My.Computer.Mouse.WheelScrollLines

Это наиболее легко увидеть с помощью элемента управления NumericUpDown, который по прокрутке настраивает значение по приращению, умноженному на этот счет.

Просто возиться с моей колесной мышью, есть 18 остановок в полном обороте, составляя 20 градусов за стопор (уверен, что я знаю, что небольшой размер выборки мышей в мире...!). 40 предполагает, что они чувствовали, что половина градусов была достаточно хороша, хотя этот последний абзац является предположением.

EDIT: Не для распространения дезинформации, при дальнейшем изучении WHEEL_DELTA на самом деле 120, NumericUpDown оказался ложным. Тем не менее, остальная часть обсуждения действительна, если применить логику к коэффициенту три.

Ответ 4

Как вы заметили, ноутбуки Touchpads могут прокручивать (либо две пальцы, либо зону прокрутки в правом размере), и в этом случае может быть много событий с очень маленькими значениями wheelDelta (либо необходимость интеграции, либо, возможно, таймауты, чтобы предотвратить слишком много перерисовок).

Также разные ОС или конфигурации или устройства могут иметь разные значения для прокрутки - пиксели, линии или страницы. например DOM event.deltaMode

Наконец, некоторые устройства (мыши и сенсорные панели) также позволяют горизонтальную прокрутку.

Вышеописанное более конкретно относится к событиям DOM в браузере, но те же проблемы могут относиться и к событиям Win.

Edit:

В Firefox MDN docs есть три события, которые вы, вероятно, интересуетесь: WM_MOUSEWHEEL, WM_MOUSEHWHEEL и WM_GESTURE (панорамирование на сенсорных устройствах).

A поиск базы данных Mozilla Bugzilla показывает множество проблем с некоторыми драйверами Touch Symantics и ALPS, отправляющими WM_VSCROLL вместо WM_MOUSEWHEEL (может быть актуальным если поддерживающие сенсорные панели).

Если вы хотите, чтобы горизонтальная поддержка прокрутки мыши, эта статья от флеш-разработчика говорит: [поддержка мыши] была добавлена ​​в Vista, поэтому, если вы используя XP или 2000, вам необходимо установить IntelliType Pro и/или IntelliPoint для поддержки WM_MOUSEHWHEEL.

@Krom: больше спекуляций и лишних фактов, но может быть полезно другим: -)