/* Update the color & size combo boxes when the selection of the theme * combo changed. Selects the current color and size scheme if the theme * is currently active, otherwise the first color and size. */ static BOOL update_color_and_size (int themeIndex, HWND comboColor, HWND comboSize) { if (themeIndex == 0) { return FALSE; } else { WCHAR currentTheme[MAX_PATH]; WCHAR currentColor[MAX_PATH]; WCHAR currentSize[MAX_PATH]; ThemeFile* theme = DSA_GetItemPtr (themeFiles, themeIndex - 1); fill_color_size_combos (theme, comboColor, comboSize); if ((SUCCEEDED (GetCurrentThemeName (currentTheme, sizeof(currentTheme) / sizeof(WCHAR), currentColor, sizeof(currentColor) / sizeof(WCHAR), currentSize, sizeof(currentSize) / sizeof(WCHAR)))) && (lstrcmpiW (currentTheme, theme->themeFileName) == 0)) { select_color_and_size (theme, currentColor, comboColor, currentSize, comboSize); } else { SendMessageW (comboColor, CB_SETCURSEL, 0, 0); SendMessageW (comboSize, CB_SETCURSEL, 0, 0); } } return TRUE; }
HMODULE CVisualStylesXP::LoadThemeRcDll(void) { if (m_hRcDll==NULL) { WCHAR szThemeFileName[MAX_PATH]; WCHAR szColorBuff[MAX_PATH]; WCHAR szSizeBuff[MAX_PATH]; if(GetCurrentThemeName(szThemeFileName,MAX_PATH,szColorBuff,MAX_PATH,szSizeBuff,MAX_PATH) == S_OK) { m_hRcDll=::LoadLibraryW(szThemeFileName); } } return(m_hRcDll); }
///////////////////////////////////////////////////////////////////////////// // Added by Mathias Tunared 2002-07-27 // BOOL CVisualStylesXP::UseVisualStyles() { static BOOL bUse = -1; if( bUse != -1 ) return bUse; HINSTANCE hinstDll; DLLVERSIONINFO dvi; ZeroMemory(&dvi, sizeof(dvi)); hinstDll = LoadLibrary(_T("comctl32.dll")); if(hinstDll) { DLLGETVERSIONPROC pDllGetVersion; pDllGetVersion = (DLLGETVERSIONPROC) GetProcAddress(hinstDll, "DllGetVersion"); if(pDllGetVersion) { ZeroMemory(&dvi, sizeof(dvi)); dvi.cbSize = sizeof(dvi); (*pDllGetVersion)(&dvi); } FreeLibrary(hinstDll); } if( dvi.dwMajorVersion == 6 && dvi.dwMinorVersion == 0 ) { //+++ WCHAR szName[MAX_PATH]; WCHAR szColor[MAX_PATH]; if (!GetCurrentThemeName(szName, MAX_PATH-1, szColor, MAX_PATH-1, NULL, 0)) { TRACE(_T("theme=<%ls> color=<%ls>\n"), szName, szColor); if ((_wcsicmp(szName, L"normalcolor") == 0) || (_wcsicmp(szName, L"homestead") == 0) || (_wcsicmp(szName, L"metallic") == 0)) { bUse = TRUE; return IsAppThemed() && m_hThemeDll; // No need to test HTHEME, but... } } } bUse = FALSE; return FALSE; }
///////////////////////////////////////////////////////////////////////////// // Added by Mathias Tunared 2002-07-27 // BOOL CVisualStylesXP::UseVisualStyles() { static BOOL bUse = -1; if( bUse != -1 ) return bUse; HINSTANCE hinstDll; DLLVERSIONINFO dvi; ZeroMemory(&dvi, sizeof(dvi)); hinstDll = LoadLibrary(TEXT("comctl32.dll")); if(hinstDll) { DLLGETVERSIONPROC pDllGetVersion; pDllGetVersion = (DLLGETVERSIONPROC) GetProcAddress(hinstDll, "DllGetVersion"); if(pDllGetVersion) { ZeroMemory(&dvi, sizeof(dvi)); dvi.cbSize = sizeof(dvi); (*pDllGetVersion)(&dvi); } FreeLibrary(hinstDll); } if( dvi.dwMajorVersion == 6 && dvi.dwMinorVersion == 0 ) { //+++ WCHAR szName [256]; WCHAR szColor [256]; if (!GetCurrentThemeName(szName, 255, szColor, 255, NULL, 0)) { CString strWinXPThemeColor = szColor; if (strWinXPThemeColor.CompareNoCase (_T("normalcolor")) == 0 || strWinXPThemeColor.CompareNoCase (_T("homestead")) == 0 || strWinXPThemeColor.CompareNoCase (_T("metallic")) == 0) { bUse = TRUE; return IsAppThemed() && m_hThemeDll; // No need to test HTHEME, but... } } } bUse = FALSE; return FALSE; }
/* Fill theme, color and sizes combo boxes with the know themes and select * the entries matching the currently active theme. */ static BOOL fill_theme_list (HWND comboTheme, HWND comboColor, HWND comboSize) { WCHAR textNoTheme[256]; int themeIndex = 0; BOOL ret = TRUE; int i; WCHAR currentTheme[MAX_PATH]; WCHAR currentColor[MAX_PATH]; WCHAR currentSize[MAX_PATH]; ThemeFile* theme = NULL; LoadStringW (GetModuleHandleW(NULL), IDS_NOTHEME, textNoTheme, sizeof(textNoTheme) / sizeof(WCHAR)); SendMessageW (comboTheme, CB_RESETCONTENT, 0, 0); SendMessageW (comboTheme, CB_ADDSTRING, 0, (LPARAM)textNoTheme); for (i = 0; i < themeFilesCount; i++) { ThemeFile* item = DSA_GetItemPtr (themeFiles, i); SendMessageW (comboTheme, CB_ADDSTRING, 0, (LPARAM)item->fancyName); } if (IsThemeActive () && SUCCEEDED (GetCurrentThemeName (currentTheme, sizeof(currentTheme) / sizeof(WCHAR), currentColor, sizeof(currentColor) / sizeof(WCHAR), currentSize, sizeof(currentSize) / sizeof(WCHAR)))) { /* Determine the index of the currently active theme. */ BOOL found = FALSE; for (i = 0; i < themeFilesCount; i++) { theme = DSA_GetItemPtr (themeFiles, i); if (lstrcmpiW (theme->themeFileName, currentTheme) == 0) { found = TRUE; themeIndex = i+1; break; } } if (!found) { /* Current theme not found?... add to the list, then... */ WINE_TRACE("Theme %s not in list of enumerated themes\n", wine_dbgstr_w (currentTheme)); myEnumThemeProc (NULL, currentTheme, currentTheme, currentTheme, NULL, NULL); themeIndex = themeFilesCount; theme = DSA_GetItemPtr (themeFiles, themeFilesCount-1); } fill_color_size_combos (theme, comboColor, comboSize); select_color_and_size (theme, currentColor, comboColor, currentSize, comboSize); } else { /* No theme selected */ ret = FALSE; } SendMessageW (comboTheme, CB_SETCURSEL, themeIndex, 0); return ret; }