INT_PTR CALLBACK AppearancePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { GLOBALS *g; LPNMHDR lpnm; g = (GLOBALS*)GetWindowLongPtr(hwndDlg, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: return AppearancePage_OnInit(hwndDlg); case WM_DESTROY: AppearancePage_OnDestroy(hwndDlg, g); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_APPEARANCE_EFFECTS: if (DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_EFFAPPEARANCE), hwndDlg, EffAppearanceDlgProc, (LPARAM)g) == IDOK) { PropSheet_Changed(GetParent(hwndDlg), hwndDlg); g->Theme = g->ThemeAdv; g->bHasChanged = TRUE; // Effects dialog doesn't change the color scheme, therefore the following lines are commented out, until fixed finally //g->ThemeId = -1; /* Customized */ //SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_COLORSCHEME, CB_SETCURSEL, (WPARAM)-1, 0); //SetDlgItemText(hwndDlg, IDC_APPEARANCE_COLORSCHEME, TEXT("")); SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->Theme); } break; case IDC_APPEARANCE_ADVANCED: if (DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_ADVAPPEARANCE), hwndDlg, AdvAppearanceDlgProc, (LPARAM)g) == IDOK) { PropSheet_Changed(GetParent(hwndDlg), hwndDlg); g->bHasChanged = TRUE; g->Theme = g->ThemeAdv; g->ThemeId = -1; /* Customized */ g_GlobalData.desktop_color = g->Theme.crColor[COLOR_DESKTOP]; SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_COLORSCHEME, CB_SETCURSEL, (WPARAM)-1, 0); SetDlgItemText(hwndDlg, IDC_APPEARANCE_COLORSCHEME, TEXT("")); SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->Theme); } break; case IDC_APPEARANCE_COLORSCHEME: if (HIWORD(wParam) == CBN_SELCHANGE && !g->bInitializing) { THEME Theme; INT ThemeId = GetSelectedThemeId(hwndDlg); PropSheet_Changed(GetParent(hwndDlg), hwndDlg); g->bHasChanged = TRUE; if (ThemeId != -1 && LoadThemeFromReg(&Theme, ThemeId)) { g->Theme = Theme; g->ThemeId = ThemeId; g_GlobalData.desktop_color = g->Theme.crColor[COLOR_DESKTOP]; SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&Theme); } } break; } break; case WM_NOTIFY: lpnm = (LPNMHDR)lParam; switch (lpnm->code) { case PSN_APPLY: if (g->bHasChanged) { INT ThemeId = GetSelectedThemeId(hwndDlg); ApplyTheme(&g->Theme, ThemeId); g->ThemeId = ThemeId; SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->Theme); g->bHasChanged = FALSE; } SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)PSNRET_NOERROR); return TRUE; case PSN_KILLACTIVE: SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)FALSE); return TRUE; case PSN_SETACTIVE: if (g->Theme.crColor[COLOR_DESKTOP] != g_GlobalData.desktop_color) { g->Theme.crColor[COLOR_DESKTOP] = g_GlobalData.desktop_color; SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->Theme); } break; } break; } return FALSE; }
INT_PTR CALLBACK AppearancePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { GLOBALS *g; LPNMHDR lpnm; g = (GLOBALS*)GetWindowLongPtr(hwndDlg, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: return AppearancePage_OnInit(hwndDlg); case WM_DESTROY: AppearancePage_OnDestroy(hwndDlg, g); break; case WM_COMMAND: if(g == NULL || g->bInitializing) return FALSE; switch (LOWORD(wParam)) { case IDC_APPEARANCE_EFFECTS: if (DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_EFFAPPEARANCE), hwndDlg, EffAppearanceDlgProc, (LPARAM)g) == IDOK) { PropSheet_Changed(GetParent(hwndDlg), hwndDlg); g->Scheme = g->SchemeAdv; g->bSchemeChanged = TRUE; } break; case IDC_APPEARANCE_ADVANCED: if (DialogBoxParam(hApplet, MAKEINTRESOURCE(IDD_ADVAPPEARANCE), hwndDlg, AdvAppearanceDlgProc, (LPARAM)g) == IDOK) { PropSheet_Changed(GetParent(hwndDlg), hwndDlg); g->bSchemeChanged = TRUE; g->Scheme = g->SchemeAdv; g_GlobalData.desktop_color = g->Scheme.crColor[COLOR_DESKTOP]; AppearancePage_UpdateThemePreview(hwndDlg, g); } break; case IDC_APPEARANCE_COLORSCHEME: if (HIWORD(wParam) == CBN_SELCHANGE) { g->ActiveTheme.Color = (PTHEME_STYLE)GetSelectedData(hwndDlg, IDC_APPEARANCE_COLORSCHEME); if (g->ActiveTheme.Color->ChildStyle != NULL) g->ActiveTheme.Size = g->ActiveTheme.Color->ChildStyle; g->bSchemeChanged = TRUE; if (g->ActiveTheme.ThemeActive) g->bThemeChanged = TRUE; PropSheet_Changed(GetParent(hwndDlg), hwndDlg); AppearancePage_LoadSelectedScheme(hwndDlg, g); AppearancePage_ShowSizes(hwndDlg, g); AppearancePage_UpdateThemePreview(hwndDlg, g); } break; case IDC_APPEARANCE_VISUAL_STYLE: if (HIWORD(wParam) == CBN_SELCHANGE) { PTHEME pTheme = (PTHEME)GetSelectedData(hwndDlg, IDC_APPEARANCE_VISUAL_STYLE); if (g->ClassicTheme.Theme == pTheme) g->ActiveTheme = g->ClassicTheme; else { g->ActiveTheme.Theme = pTheme; g->ActiveTheme.Size = pTheme->SizesList; g->ActiveTheme.Color = pTheme->ColoursList; g->ActiveTheme.ThemeActive = TRUE; } g->bThemeChanged = TRUE; g->bSchemeChanged = TRUE; PropSheet_Changed(GetParent(hwndDlg), hwndDlg); AppearancePage_ShowColorSchemes(hwndDlg, g); AppearancePage_ShowSizes(hwndDlg, g); AppearancePage_LoadSelectedScheme(hwndDlg, g); AppearancePage_UpdateThemePreview(hwndDlg, g); } break; case IDC_APPEARANCE_SIZE: if (HIWORD(wParam) == CBN_SELCHANGE) { g->ActiveTheme.Size = (PTHEME_STYLE)GetSelectedData(hwndDlg, IDC_APPEARANCE_SIZE); g->bSchemeChanged = TRUE; if(g->ActiveTheme.ThemeActive) g->bThemeChanged = TRUE; PropSheet_Changed(GetParent(hwndDlg), hwndDlg); AppearancePage_LoadSelectedScheme(hwndDlg, g); AppearancePage_UpdateThemePreview(hwndDlg, g); } } break; case WM_NOTIFY: lpnm = (LPNMHDR)lParam; switch (lpnm->code) { case PSN_APPLY: if (g->bThemeChanged) { ActivateTheme(&g->ActiveTheme); } if (g->bSchemeChanged) { ApplyScheme(&g->Scheme, &g->ActiveTheme); if (g->ActiveTheme.ThemeActive == FALSE) g->ClassicTheme = g->ActiveTheme; } AppearancePage_UpdateThemePreview(hwndDlg, g); g->bThemeChanged = FALSE; g->bSchemeChanged = FALSE; SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)PSNRET_NOERROR); return TRUE; case PSN_KILLACTIVE: SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)FALSE); return TRUE; case PSN_SETACTIVE: if (g->Scheme.crColor[COLOR_DESKTOP] != g_GlobalData.desktop_color) { g->Scheme.crColor[COLOR_DESKTOP] = g_GlobalData.desktop_color; AppearancePage_UpdateThemePreview(hwndDlg, g); } break; } break; } return FALSE; }