+ case 0x020a:
+ /* Should be WM_MOUSEWHEEL but my compiler doesn't recognize it */
+ {
+ int wheel_number = LOWORD ( lParam ) ;
+ /* THIS IS SPECULATIVE -- John Fay, 10/2/03 */
+ int ticks = HIWORD ( lParam ) / 120 ;
+ /* Should be WHEEL_DELTA instead of 120 */
+ int direction = 1;
+
+ if( ticks < 0 )
+ {
+ direction = -1;
+ ticks = -ticks;
+ }
+
+ /*
+ * The mouse cursor has moved. Remember the new mouse cursor's position
+ */
+ /* window->State.MouseX = LOWORD( lParam ); */
+ /* Need to adjust by window position, */
+ /* window->State.MouseY = HIWORD( lParam ); */
+ /* change "lParam" to other parameter */
+
+ if ( ( window->Callbacks.MouseWheel == NULL ) &&
+ ( window->Callbacks.Mouse == NULL ) )
+ break;
+
+ fgSetWindow ( window );
+ fgStructure.Window->State.Modifiers =
+ ( ( (GetKeyState( VK_LSHIFT ) < 0 ) ||
+ ( GetKeyState( VK_RSHIFT ) < 0 )) ? GLUT_ACTIVE_SHIFT : 0 ) |
+ ( ( (GetKeyState( VK_LCONTROL ) < 0 ) ||
+ ( GetKeyState( VK_RCONTROL ) < 0 )) ? GLUT_ACTIVE_CTRL : 0 ) |
+ ( ( (GetKeyState( VK_LMENU ) < 0 ) ||
+ ( GetKeyState( VK_RMENU ) < 0 )) ? GLUT_ACTIVE_ALT : 0 );
+
+ while( ticks-- )
+ if ( window->Callbacks.MouseWheel )
+ window->Callbacks.MouseWheel(
+ wheel_number,
+ direction,
+ window->State.MouseX,
+ window->State.MouseY
+ ) ;
+ else /* No mouse wheel, call the mouse button callback twice */
+ {
+ /*
+ * XXX The below assumes that you have no more than 3 mouse
+ * XXX buttons. Sorry.
+ */
+ int button = wheel_number * 2 + 4;
+ button += (1 + direction)/2;
+ window->Callbacks.Mouse ( button, GLUT_DOWN,
+ window->State.MouseX,
+ window->State.MouseY ) ;
+ window->Callbacks.Mouse ( button, GLUT_UP,
+ window->State.MouseX,
+ window->State.MouseY ) ;
+ }
+
+ fgStructure.Window->State.Modifiers = 0xffffffff;
+ }
+ break ;
+