From e34cd3b5e218bee1d618e7df805d8719ea08e163 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 18 Feb 2021 07:10:15 +0100 Subject: [PATCH] re-enable maximize button --- inc/utils.h | 1 + src/dd.c | 2 +- src/utils.c | 34 ++++++++++++++++++++++++++++++++++ src/wndproc.c | 43 ++++++++++++------------------------------- 4 files changed, 48 insertions(+), 32 deletions(-) diff --git a/inc/utils.h b/inc/utils.h index 293a565..a1c4256 100644 --- a/inc/utils.h +++ b/inc/utils.h @@ -11,6 +11,7 @@ void util_limit_game_ticks(); void util_update_bnet_pos(int newX, int newY); BOOL util_get_lowest_resolution(float ratio, SIZE* outRes, DWORD minWidth, DWORD minHeight, DWORD maxWidth, DWORD maxHeight); +void util_toggle_maximize(); void util_toggle_fullscreen(); BOOL util_unadjust_window_rect(LPRECT prc, DWORD dwStyle, BOOL fMenu, DWORD dwExStyle); void util_set_window_rect(int x, int y, int width, int height, UINT flags); diff --git a/src/dd.c b/src/dd.c index 53aa93b..6b567fd 100644 --- a/src/dd.c +++ b/src/dd.c @@ -542,7 +542,7 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp) } else { - real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, (GetWindowLong(g_ddraw->hwnd, GWL_STYLE) | WS_OVERLAPPEDWINDOW) & ~WS_MAXIMIZEBOX); + real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, (GetWindowLong(g_ddraw->hwnd, GWL_STYLE) | WS_OVERLAPPEDWINDOW));// &~WS_MAXIMIZEBOX); } if (g_ddraw->wine) diff --git a/src/utils.c b/src/utils.c index bfdce14..7b111aa 100644 --- a/src/utils.c +++ b/src/utils.c @@ -185,6 +185,40 @@ BOOL util_get_lowest_resolution(float ratio, SIZE *out_res, DWORD min_width, DWO return result; } +void util_toggle_maximize() +{ + RECT work_rc; + RECT client_rc; + + if (real_GetClientRect(g_ddraw->hwnd, &client_rc) && + SystemParametersInfo(SPI_GETWORKAREA, 0, &work_rc, 0)) + { + if (client_rc.right != g_ddraw->width || client_rc.bottom != g_ddraw->height) + { + util_set_window_rect( + (work_rc.right / 2) - (g_ddraw->width / 2), + (work_rc.bottom / 2) - (g_ddraw->height / 2), + g_ddraw->width, + g_ddraw->height, + 0); + } + else if ( + util_unadjust_window_rect( + &work_rc, + GetWindowLong(g_ddraw->hwnd, GWL_STYLE), + FALSE, + GetWindowLong(g_ddraw->hwnd, GWL_EXSTYLE))) + { + util_set_window_rect( + work_rc.left, + work_rc.top, + work_rc.right - work_rc.left, + work_rc.bottom - work_rc.top, + 0); + } + } +} + void util_toggle_fullscreen() { if (g_ddraw->bnet_active) diff --git a/src/wndproc.c b/src/wndproc.c index 2caf6b7..fdba2a6 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -377,8 +377,18 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam return DefWindowProc(hWnd, uMsg, wParam, lParam); /* Carmageddon fix */ } - /* C&C and RA really don't want to close down */ case WM_SYSCOMMAND: + + if (wParam == SC_MAXIMIZE) + { + if (g_ddraw->resizable) + { + util_toggle_maximize(); + } + + return 0; + } + if (wParam == SC_CLOSE && !GameHandlesClose) { exit(0); @@ -487,36 +497,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (g_ddraw->resizable) { - RECT work_rc; - RECT client_rc; - - if (real_GetClientRect(g_ddraw->hwnd, &client_rc) && - SystemParametersInfo(SPI_GETWORKAREA, 0, &work_rc, 0)) - { - if (client_rc.right != g_ddraw->width || client_rc.bottom != g_ddraw->height) - { - util_set_window_rect( - (work_rc.right / 2) - (g_ddraw->width / 2), - (work_rc.bottom / 2) - (g_ddraw->height / 2), - g_ddraw->width, - g_ddraw->height, - 0); - } - else if ( - util_unadjust_window_rect( - &work_rc, - GetWindowLong(g_ddraw->hwnd, GWL_STYLE), - FALSE, - GetWindowLong(g_ddraw->hwnd, GWL_EXSTYLE))) - { - util_set_window_rect( - work_rc.left, - work_rc.top, - work_rc.right - work_rc.left, - work_rc.bottom - work_rc.top, - 0); - } - } + util_toggle_maximize(); } return 0;