1818#include <assert.h>
1919
2020#include <windows.h>
21+ #include <windowsx.h>
2122
2223#include "../hashtable.h"
2324#include "../event.h"
@@ -273,7 +274,7 @@ _gdi_mouse_event_button(
273274 case WM_MBUTTONUP :
274275 return BUTTON_MIDDLE ;
275276 case WM_MOUSEWHEEL :
276- if ((wparam & 0xFFFF0000 ) > 0 ) { return BUTTON_WHEEL_UP ; }
277+ if (GET_WHEEL_DELTA_WPARAM (wparam ) > 0 ) { return BUTTON_WHEEL_UP ; }
277278 else { return BUTTON_WHEEL_DOWN ; }
278279 default :
279280 assert (!"Unhandled mouse event button" );
@@ -424,8 +425,8 @@ _gdi_window_proc(
424425 case WM_SIZE :
425426 w = gdi_backend_get_window (hwnd );
426427 if (w != NULL ) {
427- w -> base .width = (lparam & 0x0000FFFF );
428- w -> base .height = (lparam & 0xFFFF0000 ) >> 16 ;
428+ w -> base .width = LOWORD (lparam );
429+ w -> base .height = HIWORD (lparam ) ;
429430 evt .type = EVENT_RESIZE ;
430431 evt .time = gdi_get_time ();
431432 evt .target = (void * )w ;
@@ -438,8 +439,8 @@ _gdi_window_proc(
438439 case WM_MOVE :
439440 w = gdi_backend_get_window (hwnd );
440441 if (w != NULL ) {
441- w -> base .x = (lparam & 0x0000FFFF );
442- w -> base .y = (lparam & 0xFFFF0000 ) >> 16 ;
442+ w -> base .x = LOWORD (lparam );
443+ w -> base .y = HIWORD (lparam ) ;
443444 evt .type = EVENT_MOVE ;
444445 evt .time = gdi_get_time ();
445446 evt .target = (void * )w ;
@@ -505,8 +506,15 @@ _gdi_window_proc(
505506 evt .type = EVENT_BUTTON ;
506507 evt .time = gdi_get_time ();
507508 evt .target = (void * )w ;
508- evt .desc .button .x = (lparam & 0x0000FFFF );
509- evt .desc .button .y = (lparam & 0xFFFF0000 ) >> 16 ;
509+ if (msg == WM_MOUSEWHEEL ) {
510+ POINT pt = { .x = GET_X_LPARAM (lparam ), .y = GET_Y_LPARAM (lparam ) };
511+ ScreenToClient (hwnd , & pt );
512+ evt .desc .button .x = pt .x ;
513+ evt .desc .button .y = pt .y ;
514+ } else {
515+ evt .desc .button .x = GET_X_LPARAM (lparam );
516+ evt .desc .button .y = GET_Y_LPARAM (lparam );
517+ }
510518 evt .desc .button .button = _gdi_mouse_event_button (msg , wparam , lparam );
511519 evt .desc .button .state = _gdi_mouse_event_state (msg , wparam , lparam );
512520 event_notify (gdi_back -> listener , & evt );
@@ -519,8 +527,8 @@ _gdi_window_proc(
519527 evt .type = EVENT_CURSOR ;
520528 evt .time = gdi_get_time ();
521529 evt .target = (void * )w ;
522- evt .desc .cursor .x = (lparam & 0x0000FFFF );
523- evt .desc .cursor .y = (lparam & 0xFFFF0000 ) >> 16 ;
530+ evt .desc .cursor .x = GET_X_LPARAM (lparam );
531+ evt .desc .cursor .y = GET_Y_LPARAM (lparam ) ;
524532 event_notify (gdi_back -> listener , & evt );
525533 }
526534 return 0 ;
@@ -530,8 +538,6 @@ _gdi_window_proc(
530538 default :
531539 return DefWindowProc (hwnd , msg , wparam , lparam );
532540 }
533-
534- assert (!"Unhandled event" );
535541}
536542
537543#else
0 commit comments