diff --git a/src/dd.c b/src/dd.c index d810611..e2ffced 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1131,7 +1131,10 @@ ULONG dd_Release() DeleteCriticalSection(&g_ddraw->cs); /* restore old wndproc, subsequent ddraw creation will otherwise fail */ - real_SetWindowLongA(g_ddraw->hwnd, GWL_WNDPROC, (LONG)g_ddraw->wndproc); + if (g_ddraw->hwnd) + { + real_SetWindowLongA(g_ddraw->hwnd, GWL_WNDPROC, (LONG)g_ddraw->wndproc); + } HeapFree(GetProcessHeap(), 0, g_ddraw); g_ddraw = NULL; diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index 9c94b8a..2aeddf0 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -969,6 +969,13 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd) { BOOL result = real_DestroyWindow(hWnd); + if (result && g_ddraw && hWnd == g_ddraw->hwnd) + { + g_ddraw->hwnd = NULL; + g_ddraw->wndproc = NULL; + g_ddraw->render.hdc = NULL; + } + if (g_ddraw && g_ddraw->hwnd != hWnd && g_ddraw->bnet_active) { RedrawWindow(NULL, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN);