From 2eb1238648520948e93b5d9588c0398b4dbc20d5 Mon Sep 17 00:00:00 2001 From: Anis Date: Wed, 26 Nov 2014 19:56:36 +0100 Subject: [PATCH] added fullscreen support for opengl (win32) --- .../windowManager/win32/win32Window.cpp | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/Engine/source/windowManager/win32/win32Window.cpp b/Engine/source/windowManager/win32/win32Window.cpp index 0bb7677df..cb26fec41 100644 --- a/Engine/source/windowManager/win32/win32Window.cpp +++ b/Engine/source/windowManager/win32/win32Window.cpp @@ -150,10 +150,29 @@ void Win32Window::setVideoMode( const GFXVideoMode &mode ) // Set our window to have the right style based on the mode if(mode.fullScreen && !Platform::getWebDeployment() && !mOffscreenRender) - { - SetWindowLong( getHWND(), GWL_STYLE, WS_POPUP); - SetWindowPos( getHWND(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); - + { + WINDOWPLACEMENT wplacement = { sizeof(wplacement) }; + DWORD dwStyle = GetWindowLong(getHWND(), GWL_STYLE); + MONITORINFO mi = { sizeof(mi) }; + + if (GetWindowPlacement(getHWND(), &wplacement) && GetMonitorInfo(MonitorFromWindow(getHWND(), MONITOR_DEFAULTTOPRIMARY), &mi)) + { + DISPLAY_DEVICE dd = GetPrimaryDevice(); + DEVMODE dv; + ZeroMemory(&dv, sizeof(dv)); + dv.dmSize = sizeof(DEVMODE); + EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dv); + dv.dmPelsWidth = mode.resolution.x; + dv.dmPelsHeight = mode.resolution.y; + dv.dmFields = (DM_PELSWIDTH | DM_PELSHEIGHT); + ChangeDisplaySettings(&dv, CDS_FULLSCREEN); + SetWindowLong(getHWND(), GWL_STYLE, dwStyle & ~WS_OVERLAPPEDWINDOW); + SetWindowPos(getHWND(), HWND_TOP, mi.rcMonitor.left, mi.rcMonitor.top, + mi.rcMonitor.right - mi.rcMonitor.left, + mi.rcMonitor.bottom - mi.rcMonitor.top, + SWP_NOOWNERZORDER | SWP_FRAMECHANGED); + } + if(mDisplayWindow) ShowWindow(getHWND(), SW_SHOWNORMAL); @@ -172,7 +191,9 @@ void Win32Window::setVideoMode( const GFXVideoMode &mode ) } else { - // Reset device *first*, so that when we call setSize() and let it + ChangeDisplaySettings(NULL, 0); + + // Reset device *first*, so that when we call setSize() and let it // access the monitor settings, it won't end up with our fullscreen // geometry that is just about to change. @@ -1166,4 +1187,4 @@ const UTF16 *Win32Window::getWindowClassName() const UTF16 *Win32Window::getCurtainWindowClassName() { return _CurtainWindowClassName; -} \ No newline at end of file +}