From 4294e29f36eb866bc3a2df084de642dd8aaa4790 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Tue, 14 Nov 2017 23:41:52 +0100 Subject: [PATCH] ALT+ENTER to switches between Window and Full Screen --- ddraw.dll | Bin 163840 -> 164864 bytes main.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 63 insertions(+), 11 deletions(-) diff --git a/ddraw.dll b/ddraw.dll index 5598be5a97b1bc62d37629bc132915ffc21b0029..d8133622f6ff1246fd95e18b32585b3d65f397d8 100644 GIT binary patch delta 6141 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 delta 5472 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 S*huUlsty)n6ELF diff --git a/main.c b/main.c index e45bc8a..4d978cb 100644 --- a/main.c +++ b/main.c @@ -242,6 +242,18 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD if (hsicon) SendMessage(This->hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hsicon); + + memset(&This->render.mode, 0, sizeof(DEVMODE)); + This->render.mode.dmSize = sizeof(DEVMODE); + This->render.mode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT; + This->render.mode.dmPelsWidth = This->render.width; + This->render.mode.dmPelsHeight = This->render.height; + if(This->render.bpp) + { + This->render.mode.dmFields |= DM_BITSPERPEL; + This->render.mode.dmBitsPerPel = This->render.bpp; + } + if(This->windowed) { if(!This->windowed_init) @@ -271,17 +283,6 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD mouse_lock(); - memset(&This->render.mode, 0, sizeof(DEVMODE)); - This->render.mode.dmSize = sizeof(DEVMODE); - This->render.mode.dmFields = DM_PELSWIDTH|DM_PELSHEIGHT; - This->render.mode.dmPelsWidth = This->render.width; - This->render.mode.dmPelsHeight = This->render.height; - if(This->render.bpp) - { - This->render.mode.dmFields |= DM_BITSPERPEL; - This->render.mode.dmBitsPerPel = This->render.bpp; - } - if(!This->devmode && ChangeDisplaySettings(&This->render.mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { This->render.run = FALSE; @@ -396,6 +397,57 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } break; + case WM_SYSKEYDOWN: + { + if (wParam == VK_RETURN) + { + if (ddraw->windowed) + { + if(ChangeDisplaySettings(&ddraw->render.mode, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL) + { + ddraw->windowed = FALSE; + + SetWindowLong(ddraw->hWnd, GWL_STYLE, GetWindowLong(ddraw->hWnd, GWL_STYLE) & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU)); + SetWindowPos(ddraw->hWnd, HWND_TOPMOST, 0, 0, ddraw->render.width, ddraw->render.height, SWP_SHOWWINDOW); + if (ddraw->locked) + { + mouse_unlock(); + mouse_lock(); + } + } + } + else + { + if(ChangeDisplaySettings(&ddraw->mode, 0) == DISP_CHANGE_SUCCESSFUL) + { + if (!ddraw->border) + { + SetWindowLong(ddraw->hWnd, GWL_STYLE, GetWindowLong(ddraw->hWnd, GWL_STYLE) & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU)); + } + else + { + SetWindowLong(ddraw->hWnd, GWL_STYLE, GetWindowLong(ddraw->hWnd, GWL_STYLE) | WS_CAPTION | WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX); + } + + int x = (WindowPosX != -1) ? WindowPosX : (ddraw->mode.dmPelsWidth / 2) - (ddraw->render.width / 2); + int y = (WindowPosY != -1) ? WindowPosY : (ddraw->mode.dmPelsHeight / 2) - (ddraw->render.height / 2); + RECT dst = { x, y, ddraw->render.width+x, ddraw->render.height+y }; + AdjustWindowRect(&dst, GetWindowLong(ddraw->hWnd, GWL_STYLE), FALSE); + SetWindowPos(ddraw->hWnd, HWND_NOTOPMOST, dst.left, dst.top, (dst.right - dst.left), (dst.bottom - dst.top), SWP_SHOWWINDOW); + + if (ddraw->locked) + { + mouse_unlock(); + mouse_lock(); + } + + ddraw->windowed = TRUE; + } + } + return 0; + } + break; + } case WM_KEYDOWN: if(wParam == VK_CONTROL || wParam == VK_TAB) {