Thanks for all the explanations, and for the suggested fix.

From WM_MOUSEWHEEL documentation on MSDN]:

<verbatim>
The wheel rotation will be a multiple of WHEEL_DELTA, which is set at 120. This is the threshold for action to be taken, and one such action (for example, scrolling one increment) should occur for each delta.

The delta was set to 120 to allow Microsoft or other vendors to build finer-resolution wheels (a freely-rotating wheel with no notches) to send more messages per rotation, but with a smaller value in each message. To use this feature, you can either add the incoming delta values until WHEEL_DELTA is reached (so for a delta-rotation you get the same response), or scroll partial lines in response to the more frequent messages. You can also choose your scroll granularity and accumulate deltas until it is reached.
</verbatim>

Since one of the options (scroll partial lines) is not available with the listbox (scroll units can only be pages or units aka lines), I conclude that you have proposed the right fix by accumulating the deltas.

I'll commit this in a bugfix branch soon. I have figure out whether other <MouseWheel> bindings need to be changed accordingly or not.