diff --git a/inc/dd.h b/inc/dd.h index 5fa56a4..1835700 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -80,7 +80,7 @@ typedef struct cnc_ddraw } render; HWND hwnd; - LRESULT (CALLBACK *wndproc)(HWND, UINT, WPARAM, LPARAM); + WNDPROC wndproc; struct { float x; float y; } cursor; BOOL locked; BOOL adjmouse; diff --git a/src/dd.c b/src/dd.c index 9ab4e0f..fc8c278 100644 --- a/src/dd.c +++ b/src/dd.c @@ -660,9 +660,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) { hook_init(); - g_ddraw->wndproc = (LRESULT(CALLBACK *)(HWND, UINT, WPARAM, LPARAM))GetWindowLong(hwnd, GWL_WNDPROC); - - real_SetWindowLongA(g_ddraw->hwnd, GWL_WNDPROC, (LONG)fake_WndProc); + g_ddraw->wndproc = (WNDPROC)real_SetWindowLongA(g_ddraw->hwnd, GWL_WNDPROC, (LONG)fake_WndProc); if (!g_ddraw->render.hdc) { diff --git a/src/wndproc.c b/src/wndproc.c index f3503f4..240959c 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -707,5 +707,5 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } } - return g_ddraw->wndproc(hWnd, uMsg, wParam, lParam); + return CallWindowProcA(g_ddraw->wndproc, hWnd, uMsg, wParam, lParam); }