diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c
index f795b27..a31e14b 100644
--- a/src/winapi_hooks.c
+++ b/src/winapi_hooks.c
@@ -652,6 +652,13 @@ BOOL WINAPI fake_PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT w
                 //return FALSE;
             }
 
+            if (lpMsg->message == WM_MOUSEWHEEL)
+            {
+                POINT pt = { GET_X_LPARAM(lpMsg->lParam), GET_Y_LPARAM(lpMsg->lParam) };
+                real_ScreenToClient(g_ddraw->hwnd, &pt);
+                lpMsg->lParam = MAKELPARAM(pt.x, pt.y);
+            }
+
             int x = max(GET_X_LPARAM(lpMsg->lParam) - g_ddraw->mouse.x_adjust, 0);
             int y = max(GET_Y_LPARAM(lpMsg->lParam) - g_ddraw->mouse.y_adjust, 0);
 
diff --git a/src/wndproc.c b/src/wndproc.c
index a64b2cb..5ff00c2 100644
--- a/src/wndproc.c
+++ b/src/wndproc.c
@@ -789,6 +789,13 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
             return 0;
         }
 
+        if (uMsg == WM_MOUSEWHEEL)
+        {
+            POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
+            real_ScreenToClient(g_ddraw->hwnd, &pt);
+            lParam = MAKELPARAM(pt.x, pt.y);
+        }
+
         int x = max(GET_X_LPARAM(lParam) - g_ddraw->mouse.x_adjust, 0);
         int y = max(GET_Y_LPARAM(lParam) - g_ddraw->mouse.y_adjust, 0);