Ответ 1
WHEEL_DELTA больше не фиксируется до 120. Насколько я понимаю, эта константа была выбрана для обеспечения более тонких разрешений в будущем, что, очевидно, СЕЙЧАС.
См. статью из MSDN
Я работаю с событиями мыши, в частности 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?
WHEEL_DELTA больше не фиксируется до 120. Насколько я понимаю, эта константа была выбрана для обеспечения более тонких разрешений в будущем, что, очевидно, СЕЙЧАС.
См. статью из MSDN
Документация Qt более подробно описывает, почему на самом деле это 120:
int QGraphicsSceneWheelEvent::delta () const
Возвращает расстояние, на которое вращается колесо, в восьмой (1/8 с) степень. Положительное значение указывает на то, что колесо повернулось вперед от пользователя; отрицательное значение указывает, что колесо было поворачивается назад к пользователю. Большинство типов мышей работают с шагом 15 градусов, и в этом случае значение дельта кратно 120 (== 15 * 8).
http://doc.qt.digia.com/4.7/qgraphicsscenewheelevent.html#delta
Вопрос отмечен как ответ уже, я подумал, что могу предоставить дополнительную информацию.
Если я правильно понимаю, WHEEL_DELTA на самом деле 40 не 120, 120 поступает из драйвера мыши, умножая исходное значение WHEEL_DELTA на количество строк для прокрутки, которое по умолчанию 3. Вы можете получить номер строки прокрутки, используя
My.Computer.Mouse.WheelScrollLines
Это наиболее легко увидеть с помощью элемента управления NumericUpDown, который по прокрутке настраивает значение по приращению, умноженному на этот счет.
Просто возиться с моей колесной мышью, есть 18 остановок в полном обороте, составляя 20 градусов за стопор (уверен, что я знаю, что небольшой размер выборки мышей в мире...!). 40 предполагает, что они чувствовали, что половина градусов была достаточно хороша, хотя этот последний абзац является предположением.
EDIT: Не для распространения дезинформации, при дальнейшем изучении WHEEL_DELTA на самом деле 120, NumericUpDown оказался ложным. Тем не менее, остальная часть обсуждения действительна, если применить логику к коэффициенту три.
Как вы заметили, ноутбуки 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: больше спекуляций и лишних фактов, но может быть полезно другим: -)