From ec648669ef2de6324c50ea3e27a6a3fd13694e06 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sat, 20 Apr 2024 04:41:04 +0200 Subject: [PATCH] add partial support for menus in fullscreen via nonexclusive=true --- src/dd.c | 19 +++++++++++++++---- src/wndproc.c | 6 ++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/dd.c b/src/dd.c index 225a781..6398cc7 100644 --- a/src/dd.c +++ b/src/dd.c @@ -922,7 +922,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl { x = y = 0; - if (!g_config.remove_menu && GetMenu(g_ddraw.hwnd)) + if (GetMenu(g_ddraw.hwnd)) { y = real_GetSystemMetrics(SM_CYMENU); } @@ -972,8 +972,19 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl } else { + int menu_height = 0; + if (GetMenu(g_ddraw.hwnd)) - SetMenu(g_ddraw.hwnd, NULL); + { + if (g_config.remove_menu || !g_config.nonexclusive) + { + SetMenu(g_ddraw.hwnd, NULL); + } + else + { + menu_height = real_GetSystemMetrics(SM_CYMENU); + } + } LONG style = real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE); @@ -1011,7 +1022,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl 0, 0, g_ddraw.render.width, - g_ddraw.render.height, + g_ddraw.render.height + menu_height, swp_flags); swp_flags = SWP_SHOWWINDOW; @@ -1071,7 +1082,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl 0, 0, g_ddraw.render.width, - g_ddraw.render.height, + g_ddraw.render.height + menu_height, swp_flags); if (d3d9_active && g_config.nonexclusive) diff --git a/src/wndproc.c b/src/wndproc.c index 35b8cf2..8ea8ba5 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -244,13 +244,15 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { g_ddraw.last_set_window_pos_tick = timeGetTime(); + int menu_height = GetMenu(g_ddraw.hwnd) ? real_GetSystemMetrics(SM_CYMENU) : 0; + real_SetWindowPos( g_ddraw.hwnd, HWND_TOPMOST, 1, 1, g_ddraw.render.width, - g_ddraw.render.height, + g_ddraw.render.height + menu_height, SWP_SHOWWINDOW); real_SetWindowPos( @@ -259,7 +261,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam 0, 0, g_ddraw.render.width, - g_ddraw.render.height, + g_ddraw.render.height + menu_height, SWP_SHOWWINDOW); } return 0;