Answers to exercises

Raymond Chen

What is the significance of the (int) cast in the computation of dLines?

It isn’t. I got the question wrong. The real question should have been “What is the significance of the (int) cast in the computation of g_iWheelCarryover?”

The answer is to ensure that the computation is performed with signed integers throughout. If the cast were missing, then the computation would have been unsigned (since mixing signed and unsigned yields unsigned). dLines is a signed integer, let’s say it’s -1. Multiply by WHEEL_DELTA yields -120. Now convert it to an unsigned integer and you get a number in excess of four billion. Divided by uScroll (typically 3) yields a number greater than one billion, which is incorrect.

Assuming you don’t have a high-resolution wheel mouse, how would you test that your sub-detent mouse wheel handling was working properly?

This is an easy one. Insert temporary code at the top of the OnMouseWheel function that says zDelta /= 4. Ta-da, your mouse now has quadruple its original resolution.


Discussion is closed.

Feedback usabilla icon