/* Copyright (c) 2000 Microsoft Corporation Module Name: Display.cpp Abstract: This class is used to increase RA performance by down to 256 colors. Revision History: created steveshi 02/19/01 */ #include "stdafx.h" #include "rcbdyctl.h" #include "Display.h" #include "uxthemep.h" #include "uxtheme.h" ///////////////////////////////////////////////////////////////////////////// // CDisplay CDisplay::CDisplay() { } CDisplay::~CDisplay() { } STDMETHODIMP CDisplay::get_PixBits(LONG *pVal) { HRESULT hr = S_OK; DEVMODE DevMode; if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &DevMode)) { *pVal = DevMode.dmBitsPerPel; } else hr = HRESULT_FROM_WIN32(GetLastError()); return hr; } STDMETHODIMP CDisplay::put_PixBits(LONG lVal) { // check if the new lVal is supported. HRESULT hr = E_INVALIDARG; DWORD iNumMode = 0; // Get the current settings: DEVMODE oldDevMode, DevMode; if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &oldDevMode)) { if (oldDevMode.dmBitsPerPel == lVal) return S_OK; } else return HRESULT_FROM_WIN32(GetLastError()); // Couldn't get default settings while (EnumDisplaySettings(NULL, iNumMode++, &DevMode)) { if (DevMode.dmPelsWidth == oldDevMode.dmPelsWidth && DevMode.dmPelsHeight == oldDevMode.dmPelsHeight && DevMode.dmDisplayFrequency == oldDevMode.dmDisplayFrequency && DevMode.dmBitsPerPel == lVal) { if (ChangeDisplaySettings(&DevMode, CDS_TEST) == DISP_CHANGE_SUCCESSFUL && ChangeDisplaySettings(&DevMode, 0) == DISP_CHANGE_SUCCESSFUL) { hr = S_OK; break; } } } return hr; } STDMETHODIMP CDisplay::put_WallPaper(BOOL fOn) { HRESULT hr = S_OK; if (!fOn) { // Turn off wall paper SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "", SPIF_SENDWININICHANGE); // Turn off theme ClassicTheme(TRUE); } else { // Set it back to default wall paper. SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, SETWALLPAPER_DEFAULT , SPIF_SENDWININICHANGE); // Turn the theme back on ClassicTheme(FALSE); } return S_OK; } HRESULT CDisplay::ClassicTheme(BOOL fOn) { HRESULT hr=S_OK; static WCHAR szNameBuff[MAX_PATH] = {0}; static WCHAR szColorBuff[MAX_PATH] = {0}; static WCHAR szSizeBuff[MAX_PATH] = {0}; DWORD dwMaxNameChars = MAX_PATH - 1; if (fOn) // Change to classic theme { szNameBuff[0] = L'\0'; hr = GetCurrentThemeName(&szNameBuff[0], dwMaxNameChars, &szColorBuff[0], dwMaxNameChars, &szSizeBuff[0], dwMaxNameChars); if (SUCCEEDED(hr)) ApplyTheme(NULL, AT_NOREGUPDATE, NULL); } else // Switch to default theme { if (szNameBuff[0] != L'\0') { HTHEMEFILE hThemeFile; hr = OpenThemeFile(szNameBuff, szColorBuff, szSizeBuff, &hThemeFile, TRUE); if (SUCCEEDED(hr)) { ApplyTheme(hThemeFile, AT_NOREGUPDATE, NULL); CloseThemeFile(hThemeFile); } } } return S_OK; }