bool CWinSystemWin32::ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop) { m_nWidth = newWidth; m_nHeight = newHeight; if(newLeft > 0) m_nLeft = newLeft; if(newTop > 0) m_nTop = newTop; ResizeInternal(); return true; }
bool CWinSystemWin32::SetFullScreenEx(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays, bool forceResChange) { m_IsAlteringWindow = true; CLog::Log(LOGDEBUG, "%s (%s) on screen %d with size %dx%d, refresh %f%s", __FUNCTION__, !fullScreen ? "windowed" : (CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOSCREEN_FAKEFULLSCREEN) ? "windowed fullscreen" : "true fullscreen"), res.iScreen, res.iWidth, res.iHeight, res.fRefreshRate, (res.dwFlags & D3DPRESENTFLAG_INTERLACED) ? "i" : ""); bool forceResize = false; if (m_nScreen != res.iScreen) { forceResize = true; RestoreDesktopResolution(m_nScreen); } if(m_hWnd && !m_bFullScreen && fullScreen) { // save position of windowed mode WINDOWINFO wi; wi.cbSize = sizeof(WINDOWINFO); if(GetWindowInfo(m_hWnd, &wi)) { m_nLeft = wi.rcClient.left; m_nTop = wi.rcClient.top; m_ValidWindowedPosition = true; } else CLog::Log(LOGERROR, "%s : GetWindowInfo failed with %d", __FUNCTION__, GetLastError()); } m_bFullScreen = fullScreen; m_nScreen = res.iScreen; m_nWidth = res.iWidth; m_nHeight = res.iHeight; m_bBlankOtherDisplay = blankOtherDisplays; if (fullScreen && CSettings::GetInstance().GetBool(CSettings::SETTING_VIDEOSCREEN_FAKEFULLSCREEN)) ChangeResolution(res, forceResChange); ResizeInternal(forceResize); BlankNonActiveMonitors(m_bBlankOtherDisplay); m_IsAlteringWindow = false; return true; }
bool CWinSystemWin32::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays) { m_IsAlteringWindow = true; CLog::Log(LOGDEBUG, "%s (%s) on screen %d with size %dx%d, refresh %f%s", __FUNCTION__, !fullScreen ? "windowed" : (g_guiSettings.GetBool("videoscreen.fakefullscreen") ? "windowed fullscreen" : "true fullscreen"), res.iScreen, res.iWidth, res.iHeight, res.fRefreshRate, (res.dwFlags & D3DPRESENTFLAG_INTERLACED) ? "i" : ""); bool forceResize = false; if (m_nScreen != res.iScreen) { forceResize = true; RestoreDesktopResolution(m_nScreen); } if(!m_bFullScreen && fullScreen) { // save position of windowed mode WINDOWINFO wi; wi.cbSize = sizeof(WINDOWINFO); GetWindowInfo(m_hWnd, &wi); m_nLeft = wi.rcClient.left; m_nTop = wi.rcClient.top; m_ValidWindowedPosition = true; } m_bFullScreen = fullScreen; m_nScreen = res.iScreen; m_nWidth = res.iWidth; m_nHeight = res.iHeight; m_bBlankOtherDisplay = blankOtherDisplays; if (fullScreen && g_guiSettings.GetBool("videoscreen.fakefullscreen")) ChangeResolution(res); ResizeInternal(forceResize); BlankNonActiveMonitors(m_bBlankOtherDisplay); m_IsAlteringWindow = false; return true; }
bool CWinSystemWin32::CreateNewWindow(const CStdString& name, bool fullScreen, RESOLUTION_INFO& res, PHANDLE_EVENT_FUNC userFunction) { m_hInstance = ( HINSTANCE )GetModuleHandle( NULL ); m_nWidth = res.iWidth; m_nHeight = res.iHeight; m_bFullScreen = fullScreen; m_nScreen = res.iScreen; m_hIcon = LoadIcon(m_hInstance, MAKEINTRESOURCE(IDI_MAIN_ICON)); // Register the windows class WNDCLASS wndClass; wndClass.style = CS_OWNDC; // For OpenGL wndClass.lpfnWndProc = CWinEvents::WndProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = m_hInstance; wndClass.hIcon = m_hIcon; wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); wndClass.hbrBackground = ( HBRUSH )GetStockObject( BLACK_BRUSH ); wndClass.lpszMenuName = NULL; wndClass.lpszClassName = name.c_str(); if( !RegisterClass( &wndClass ) ) { return false; } HWND hWnd = CreateWindow( name.c_str(), name.c_str(), fullScreen ? WS_POPUP : WS_OVERLAPPEDWINDOW, 0, 0, m_nWidth, m_nHeight, 0, NULL, m_hInstance, userFunction ); if( hWnd == NULL ) { return false; } const DWORD dwHwndTabletProperty = TABLET_DISABLE_PENBARRELFEEDBACK | // disables UI feedback on pen button down (circle) TABLET_DISABLE_FLICKS; // disables pen flicks (back, forward, drag down, drag up) SetProp(hWnd, MICROSOFT_TABLETPENSERVICE_PROPERTY, reinterpret_cast<HANDLE>(dwHwndTabletProperty)); // setup our touch pointers HMODULE hUser32 = GetModuleHandleA( "user32" ); if (hUser32) { PtrGetGestureInfo = (pGetGestureInfo) GetProcAddress( hUser32, "GetGestureInfo" ); PtrSetGestureConfig = (pSetGestureConfig) GetProcAddress( hUser32, "SetGestureConfig" ); PtrCloseGestureInfoHandle = (pCloseGestureInfoHandle) GetProcAddress( hUser32, "CloseGestureInfoHandle" ); } m_hWnd = hWnd; m_hDC = GetDC(m_hWnd); m_bWindowCreated = true; CreateBlankWindows(); ResizeInternal(true); // Show the window ShowWindow( m_hWnd, SW_SHOWDEFAULT ); UpdateWindow( m_hWnd ); return true; }