From 19d1d4f942a2838d4eefb39fa468ae4189de6b7f Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Mon, 10 Jul 2023 22:08:50 +0200 Subject: [PATCH] update ShowWindow hook --- inc/dd.h | 1 + src/dd.c | 4 ++++ src/winapi_hooks.c | 20 ++++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/inc/dd.h b/inc/dd.h index b7d58a0..3abdd4a 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -168,6 +168,7 @@ typedef struct CNCDDRAW int maxgameticks; BOOL alt_key_down; BOOL releasealt; + BOOL invisible; BOOL bnet_active; BOOL bnet_was_fullscreen; BOOL bnet_was_upscaled; diff --git a/src/dd.c b/src/dd.c index 2096b72..fd70aa4 100644 --- a/src/dd.c +++ b/src/dd.c @@ -766,6 +766,8 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl LONG style = real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE); LONG exstyle = real_GetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE); + g_ddraw->invisible = !(style & WS_VISIBLE); + AdjustWindowRectEx(&dst, style, GetMenu(g_ddraw->hwnd) != NULL, exstyle); real_SetWindowPos( @@ -802,6 +804,8 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl LONG style = real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE); + g_ddraw->invisible = !(style & WS_VISIBLE); + DWORD swp_flags = SWP_SHOWWINDOW; if ((style & WS_CAPTION)) diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index 25605c3..cfd28e7 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -504,6 +504,26 @@ BOOL WINAPI fake_ShowWindow(HWND hWnd, int nCmdShow) { if (g_ddraw && g_ddraw->hwnd == hWnd) { + if (g_ddraw->invisible && + (nCmdShow == SW_SHOWDEFAULT || nCmdShow == SW_SHOWNORMAL) && + (g_hook_method != 2 && g_hook_method != 3)) + { + g_ddraw->invisible = FALSE; + + BOOL result = real_ShowWindow(hWnd, nCmdShow); + + if (result) + { + //real_SendMessageA(g_ddraw->hwnd, WM_SHOWWINDOW, 1, 0); + real_SendMessageA(g_ddraw->hwnd, WM_SIZE_DDRAW, 0, MAKELPARAM(g_ddraw->width, g_ddraw->height)); + //real_SendMessageA(g_ddraw->hwnd, WM_MOVE_DDRAW, 0, MAKELPARAM(0, 0)); + + return 0; + } + + return result; + } + if (nCmdShow == SW_SHOWMAXIMIZED) nCmdShow = SW_SHOWNORMAL;