Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}