[WINHTTP] Sync with Wine Staging 3.9. CORE-14656
[reactos.git] / dll / cpl / desk / advappdlg.c
index 837bc0b..e07d486 100644 (file)
@@ -1,5 +1,4 @@
-/* $Id: advappdlg.c 24836 2007-02-12 03:12:56Z tkreuzer $
- *
+/*
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS Display Control Panel
  * FILE:            dll/cpl/desk/advappdlg.c
 
 typedef struct
 {
-       int Size;
-       int Size2;
-       int Color1;
-       int Color2;
-       int Font;
-       int FontColor;
+    int Size;
+    int Size2;
+    int Color1;
+    int Color2;
+    int Font;
+    int FontColor;
 } ASSIGNMENT;
 
 /* This const assigns the color and metric numbers to the elements from the elements list */
 
-/* Size 1 (width)      Size 2 (height) Color 1                                 Color 2                                                 Font                    Fontcolor */
+/*   Size 1 (width)          Size 2 (height)     Color 1                  Color 2                         Font             Fontcolor */
 const ASSIGNMENT g_Assignment[NUM_ELEMENTS] =
-{ {-1,                         -1,                             COLOR_DESKTOP,                  -1,                                                             -1,                             -1},                            /* -Desktop */
-  {SIZE_CAPTION_Y,     -1,                             COLOR_INACTIVECAPTION,  COLOR_GRADIENTINACTIVECAPTION,  FONT_CAPTION,   -1},                            /* inactive window caption */
-  {SIZE_BORDER_X,      SIZE_BORDER_Y,  COLOR_INACTIVEBORDER,   -1,                                                             -1,                             -1},                            /* inactive window border */
-  {SIZE_CAPTION_Y,     -1,                             COLOR_ACTIVECAPTION,    COLOR_GRADIENTACTIVECAPTION,    FONT_CAPTION,   COLOR_CAPTIONTEXT},     /* -active window caption */
-  {SIZE_BORDER_X,      SIZE_BORDER_Y,  COLOR_ACTIVEBORDER,             -1,                                                             -1,                             -1},                            /* active window border */
-  {SIZE_MENU_SIZE_X,SIZE_MENU_Y,       COLOR_MENU,                             -1,                                                     FONT_MENU,              COLOR_MENUTEXT},        /* menu */
-  {SIZE_MENU_SIZE_X,SIZE_MENU_Y,       COLOR_HIGHLIGHT,                -1,                                                             FONT_HILIGHT,   COLOR_HIGHLIGHTTEXT},/* marked element */
-  {-1,                         -1,                             COLOR_WINDOW,                   -1 /*COLOR_WINDOWFRAME*/,                               -1,                             COLOR_WINDOWTEXT},      /* window */
-  {SIZE_SCROLL_X,      SIZE_SCROLL_Y,  COLOR_SCROLLBAR,                -1,                                                             -1,                             -1},                            /* scroll bar */
-  {-1,                         -1,                             COLOR_3DFACE,                   -1,                                                             -1,                             COLOR_BTNTEXT},         /* 3d objects */
-  {SIZE_SMCAPTION_Y,-1,                                -1,                                             -1,                                                             FONT_SMCAPTION, -1},                            /* palette window caption */
-  {-1,                         -1,                             -1,                                             -1,                                                             -1,                             -1},                            /* symbol caption FIXME: Access? */
-  {SIZE_CAPTION_Y,     -1,                             -1,                                             -1,                                                             -1,                             -1},                            /* caption bar */
-  {-1,                         -1,                             -1,                                             -1,                                                             -1,                             COLOR_GRAYTEXT},        /* inactive menu item FIXME: Access? */
-  {-1,                         -1,                             -1,                                             -1,                                                             FONT_DIALOG,    COLOR_WINDOWTEXT},      /* dialog */
-  {-1,                         -1,                             -1,                                             -1,                                                             -1,                             -1},                            /* scrollbar controls FIXME: Access? */
-  {-1,                         -1,                             COLOR_APPWORKSPACE,             -1,                                                             -1,                             -1},                            /* application background */
-  {-1,                         -1,                             -1,                                             -1,                                                             -1,                             -1},                            /* small caption bar FIXME: Access? */
-  {SIZE_ICON_SPC_X,    -1,                             -1,                                             -1,                                                             -1,                             -1},                            /* symbol distance horiz. */
-  {SIZE_ICON_SPC_Y,    -1,                             -1,                                             -1,                                                             -1,                             -1},                            /* symbol distance vert. */
-  {-1,                         -1,                             COLOR_INFOBK,                   -1,                                                             FONT_INFO,              COLOR_INFOTEXT},        /* quickinfo */
-  {SIZE_ICON_X,                SIZE_ICON_Y,    -1,                                             -1,                                                             FONT_ICON,              -1}};                           /* symbol */
+{
+    {-1,                     -1,                 COLOR_DESKTOP,           -1,                             -1,              -1},                 /* Desktop */
+    {SIZE_CAPTION_HEIGHT,    -1,                 COLOR_INACTIVECAPTION,   COLOR_GRADIENTINACTIVECAPTION,  FONT_CAPTION,    COLOR_INACTIVECAPTIONTEXT},/* inactive window caption */
+    {SIZE_BORDER_WIDTH,      -1,                 COLOR_INACTIVEBORDER,    -1,                             -1,              -1},                 /* inactive window border */
+    {SIZE_CAPTION_HEIGHT,    -1,                 COLOR_ACTIVECAPTION,     COLOR_GRADIENTACTIVECAPTION,    FONT_CAPTION,    COLOR_CAPTIONTEXT},  /* active window caption */
+    {SIZE_BORDER_WIDTH,      -1,                 COLOR_ACTIVEBORDER,      -1,                             -1,              -1},                 /* active window border */
+    {SIZE_MENU_HEIGHT,       SIZE_MENU_WIDTH,    COLOR_MENU,              COLOR_MENUHILIGHT,              FONT_MENU,       COLOR_MENUTEXT},     /* menu */
+    {SIZE_MENU_HEIGHT,       SIZE_MENU_WIDTH,    COLOR_HIGHLIGHT,         -1,                             -1,              COLOR_HIGHLIGHTTEXT},/* marked element */
+    {-1,                     -1,                 COLOR_WINDOW,            -1 /*COLOR_WINDOWFRAME*/,       -1,              COLOR_WINDOWTEXT},   /* window */
+    {SIZE_SCROLL_WIDTH,      SIZE_SCROLL_HEIGHT, COLOR_SCROLLBAR,         -1,                             -1,              -1},                 /* scroll bar */
+    {-1,                     -1,                 COLOR_3DFACE,            -1,                             -1,              COLOR_BTNTEXT},      /* 3d objects */
+    {SIZE_SM_CAPTION_HEIGHT, -1,                 -1,                      -1,                             FONT_SMCAPTION,  -1},                 /* palette (small) window caption */
+    {SIZE_CAPTION_HEIGHT,    -1,                 -1,                      -1,                             -1,              -1},                 /* caption bar buttons */
+    {-1,                     -1,                 -1,                      -1,                             FONT_MESSAGE,    COLOR_WINDOWTEXT},   /* dialog */
+    {-1,                     -1,                 COLOR_APPWORKSPACE,      -1,                             -1,              -1},                 /* application background */
+    {SIZE_ICON_SPACE_X,      -1,                 -1,                      -1,                             -1,              -1},                 /* icon distance horiz. */
+    {SIZE_ICON_SPACE_Y,      -1,                 -1,                      -1,                             -1,              -1},                 /* icon distance vert. */
+    {-1,                     -1,                 COLOR_INFOBK,            -1,                             FONT_STATUS,     COLOR_INFOTEXT},     /* quickinfo */
+    {SIZE_ICON,              -1,                 -1,                      -1,                             FONT_ICON,       -1},                 /* icon */
+//  {-1,                     -1,                 -1,                      -1,                             -1,              COLOR_GRAYTEXT},     /* inactive menu item -- FIXME: Access? */
+};
 
 /******************************************************************************/
 
@@ -56,44 +54,44 @@ const ASSIGNMENT g_Assignment[NUM_ELEMENTS] =
 static VOID
 UpdateButtonColor(HWND hwndDlg, GLOBALS* g, INT ID, INT nButton, INT nColor)
 {
-       HDC hdcColorButton, hdcCompat;
-       RECT rect;
-       HBRUSH hbrush;
-       HWND hwndColorButton;
-       HGDIOBJ hgdiTmp;
-
-       if (nColor != -1)
-       {
-               /* Create a DC to draw on */
-               hwndColorButton = GetDlgItem(hwndDlg, ID);
-               hdcColorButton = GetDC(hwndColorButton);
-               hdcCompat = CreateCompatibleDC(hdcColorButton);
-               ReleaseDC(hwndColorButton, hdcColorButton);
-
-               /* Select the button image to it */
-               hgdiTmp = SelectObject(hdcCompat, g->hbmpColor[nButton]);
-
-               /* Create a brush and draw the rectangle */
-               rect.left = 2;
-               rect.top = 2;
-               rect.right = 22;
-               rect.bottom = 13;
-               hbrush = CreateSolidBrush(g->SchemeAdv.crColor[nColor]);
-               FillRect(hdcCompat, &rect, hbrush);
-               DeleteObject(hbrush);
-
-               /* hdcCompat is not needed anymore */
-               SelectObject(hdcCompat,hgdiTmp);
-               DeleteDC(hdcCompat);
-
-               SendDlgItemMessage(hwndDlg, ID, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[nButton]);
-               EnableWindow(GetDlgItem(hwndDlg, ID), TRUE);
-       }
-       else
-       {
-               SendDlgItemMessage(hwndDlg, ID, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)NULL);
-               EnableWindow(GetDlgItem(hwndDlg, ID), FALSE);
-       }
+    HDC hdcColorButton, hdcCompat;
+    RECT rect;
+    HBRUSH hbrush;
+    HWND hwndColorButton;
+    HGDIOBJ hgdiTmp;
+
+    if (nColor != -1)
+    {
+        /* Create a DC to draw on */
+        hwndColorButton = GetDlgItem(hwndDlg, ID);
+        hdcColorButton = GetDC(hwndColorButton);
+        hdcCompat = CreateCompatibleDC(hdcColorButton);
+        ReleaseDC(hwndColorButton, hdcColorButton);
+
+        /* Select the button image to it */
+        hgdiTmp = SelectObject(hdcCompat, g->hbmpColor[nButton]);
+
+        /* Create a brush and draw the rectangle */
+        rect.left = 2;
+        rect.top = 2;
+        rect.right = 22;
+        rect.bottom = 13;
+        hbrush = CreateSolidBrush(g->SchemeAdv.crColor[nColor]);
+        FillRect(hdcCompat, &rect, hbrush);
+        DeleteObject(hbrush);
+
+        /* hdcCompat is not needed anymore */
+        SelectObject(hdcCompat,hgdiTmp);
+        DeleteDC(hdcCompat);
+
+        SendDlgItemMessage(hwndDlg, ID, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[nButton]);
+        EnableWindow(GetDlgItem(hwndDlg, ID), TRUE);
+    }
+    else
+    {
+        SendDlgItemMessage(hwndDlg, ID, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)NULL);
+        EnableWindow(GetDlgItem(hwndDlg, ID), FALSE);
+    }
 }
 
 
@@ -101,87 +99,87 @@ UpdateButtonColor(HWND hwndDlg, GLOBALS* g, INT ID, INT nButton, INT nColor)
 static VOID
 InitColorButtons(HWND hwndDlg, GLOBALS* g)
 {
-       INT i;
-       HDC hdcColorButton, hdcCompat;
-       RECT rect;
-       HBRUSH hbrush;
-       HPEN hPen;
-       HWND hwndColorButton;
-       HGDIOBJ hgdiTemp;
+    INT i;
+    HDC hdcColorButton, hdcCompat;
+    RECT rect;
+    HBRUSH hbrush;
+    HPEN hPen;
+    HWND hwndColorButton;
+    HGDIOBJ hgdiTemp;
     COLOR_SCHEME *scheme = &g->SchemeAdv;
 
-       const POINT Points[3] = {{29,6},{33,6},{31,8}};
-
-       hwndColorButton = GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_COLOR1_B);
-       hdcColorButton = GetDC(hwndColorButton);
-       for (i = 0; i <= 2; i++)
-       {
-               /* Create a DC to draw on */
-               hdcCompat = CreateCompatibleDC(hdcColorButton);
-
-               /* Create the button image */
-               g->hbmpColor[i] = CreateCompatibleBitmap(hdcColorButton, 36, 15);
-
-               /* Select the button image to the DC */
-               hgdiTemp = SelectObject(hdcCompat, g->hbmpColor[i]);
-
-               /* Draw the buttons background color */
-               rect.left = 0;
-               rect.top = 0;
-               rect.right = 36;
-               rect.bottom = 15;
-               hbrush = CreateSolidBrush(scheme->crColor[COLOR_BTNFACE]);
-               FillRect(hdcCompat, &rect, hbrush);
-               DeleteObject(hbrush);
-
-               /* Draw the rectangle */
-               rect.left = 1;
-               rect.top = 1;
-               rect.right = 23;
-               rect.bottom = 14;
-               hbrush = CreateSolidBrush(scheme->crColor[COLOR_BTNTEXT]);
-               FillRect(hdcCompat, &rect, hbrush);
-               DeleteObject(hbrush);
-
-               /* Draw left side of line */
-               hPen = CreatePen(PS_SOLID, 1, scheme->crColor[COLOR_BTNSHADOW]);
-               SelectObject(hdcCompat, hPen);
-               MoveToEx(hdcCompat, 26, 1, NULL);
-               LineTo(hdcCompat, 26, 14);
-               SelectObject(hdcCompat, GetStockObject(BLACK_PEN));
-               DeleteObject(hPen);
-
-               /* Draw right side of line */
-               hPen = CreatePen(PS_SOLID, 1, scheme->crColor[COLOR_BTNHIGHLIGHT]);
-               SelectObject(hdcCompat,hPen);
-               MoveToEx(hdcCompat, 27, 1, NULL);
-               LineTo(hdcCompat, 27, 14);
-               SelectObject(hdcCompat, GetStockObject(BLACK_PEN));
-               DeleteObject(hPen);
-
-               /* Draw triangle */
-               hPen = CreatePen(PS_SOLID, 1, scheme->crColor[COLOR_BTNTEXT]);
-               hbrush = CreateSolidBrush(scheme->crColor[COLOR_BTNTEXT]);
-               SelectObject(hdcCompat, hPen);
-               SelectObject(hdcCompat, hbrush);
-               SetPolyFillMode(hdcCompat, WINDING);
-
-               /* FIXME: HACK, see Points definition */
-               Polygon(hdcCompat, Points, 3);
-
-               /* Cleanup */
-               SelectObject(hdcCompat,hgdiTemp);
-               DeleteDC(hdcCompat);
-               DeleteObject(hPen);
-               DeleteObject(hbrush);
-       }
-
-       ReleaseDC(hwndColorButton, hdcColorButton);
-
-       /* Set the images of the buttons */
-       SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_COLOR1_B, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[0]);
-       SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_COLOR2_B, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[1]);
-       SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTCOLOR_B, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[2]);
+    const POINT Points[3] = {{29,6},{33,6},{31,8}};
+
+    hwndColorButton = GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_COLOR1_B);
+    hdcColorButton = GetDC(hwndColorButton);
+    for (i = 0; i <= 2; i++)
+    {
+        /* Create a DC to draw on */
+        hdcCompat = CreateCompatibleDC(hdcColorButton);
+
+        /* Create the button image */
+        g->hbmpColor[i] = CreateCompatibleBitmap(hdcColorButton, 36, 15);
+
+        /* Select the button image to the DC */
+        hgdiTemp = SelectObject(hdcCompat, g->hbmpColor[i]);
+
+        /* Draw the buttons background color */
+        rect.left = 0;
+        rect.top = 0;
+        rect.right = 36;
+        rect.bottom = 15;
+        hbrush = CreateSolidBrush(scheme->crColor[COLOR_BTNFACE]);
+        FillRect(hdcCompat, &rect, hbrush);
+        DeleteObject(hbrush);
+
+        /* Draw the rectangle */
+        rect.left = 1;
+        rect.top = 1;
+        rect.right = 23;
+        rect.bottom = 14;
+        hbrush = CreateSolidBrush(scheme->crColor[COLOR_BTNTEXT]);
+        FillRect(hdcCompat, &rect, hbrush);
+        DeleteObject(hbrush);
+
+        /* Draw left side of line */
+        hPen = CreatePen(PS_SOLID, 1, scheme->crColor[COLOR_BTNSHADOW]);
+        SelectObject(hdcCompat, hPen);
+        MoveToEx(hdcCompat, 26, 1, NULL);
+        LineTo(hdcCompat, 26, 14);
+        SelectObject(hdcCompat, GetStockObject(BLACK_PEN));
+        DeleteObject(hPen);
+
+        /* Draw right side of line */
+        hPen = CreatePen(PS_SOLID, 1, scheme->crColor[COLOR_BTNHIGHLIGHT]);
+        SelectObject(hdcCompat,hPen);
+        MoveToEx(hdcCompat, 27, 1, NULL);
+        LineTo(hdcCompat, 27, 14);
+        SelectObject(hdcCompat, GetStockObject(BLACK_PEN));
+        DeleteObject(hPen);
+
+        /* Draw triangle */
+        hPen = CreatePen(PS_SOLID, 1, scheme->crColor[COLOR_BTNTEXT]);
+        hbrush = CreateSolidBrush(scheme->crColor[COLOR_BTNTEXT]);
+        SelectObject(hdcCompat, hPen);
+        SelectObject(hdcCompat, hbrush);
+        SetPolyFillMode(hdcCompat, WINDING);
+
+        /* FIXME: HACK, see Points definition */
+        Polygon(hdcCompat, Points, 3);
+
+        /* Cleanup */
+        SelectObject(hdcCompat,hgdiTemp);
+        DeleteDC(hdcCompat);
+        DeleteObject(hPen);
+        DeleteObject(hbrush);
+    }
+
+    ReleaseDC(hwndColorButton, hdcColorButton);
+
+    /* Set the images of the buttons */
+    SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_COLOR1_B, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[0]);
+    SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_COLOR2_B, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[1]);
+    SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTCOLOR_B, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[2]);
 }
 
 
@@ -189,17 +187,17 @@ InitColorButtons(HWND hwndDlg, GLOBALS* g)
 static int CALLBACK
 EnumFontFamExProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, DWORD dwFontType, LPARAM lParam)
 {
-       /* Don't enumerate more than 100 fonts */
-       if (SendMessage((HWND)lParam, CB_GETCOUNT, 0, 0) >= 100)
-               return 0;
+    /* Don't enumerate more than 100 fonts */
+    if (SendMessage((HWND)lParam, CB_GETCOUNT, 0, 0) >= 100)
+        return 0;
 
-       /* Only add the string once */
-       if (SendMessage((HWND)lParam, CB_FINDSTRINGEXACT, -1, (WPARAM)&(lpelfe->elfLogFont.lfFaceName)) != CB_ERR)
-               return 2;
+    /* Only add the string once */
+    if (SendMessage((HWND)lParam, CB_FINDSTRINGEXACT, -1, (WPARAM)&(lpelfe->elfLogFont.lfFaceName)) != CB_ERR)
+        return 2;
 
-       SendMessage((HWND)lParam, CB_ADDSTRING, 0, (WPARAM)&(lpelfe->elfLogFont.lfFaceName));
+    SendMessage((HWND)lParam, CB_ADDSTRING, 0, (WPARAM)&(lpelfe->elfLogFont.lfFaceName));
 
-       return 1;
+    return 1;
 }
 
 
@@ -207,78 +205,79 @@ EnumFontFamExProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, DWORD dwFontTy
 static VOID
 UpdateControls(HWND hwndDlg, GLOBALS *g)
 {
-       INT iElement;
-       HDC hdcDlg;
-
-       iElement = g->CurrentElement;
-
-       /* First enable / disable the controls */
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E), (g_Assignment[iElement].Size != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD), (g_Assignment[iElement].Size != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_T), (g_Assignment[iElement].Size != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_COLOR1_T), (g_Assignment[iElement].Color1 != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_COLOR2_T), (g_Assignment[iElement].Color2 != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_T), (g_Assignment[iElement].Font != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_C), (g_Assignment[iElement].Font != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_T), (g_Assignment[iElement].Font != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E), (g_Assignment[iElement].Font != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTCOLOR_T), (g_Assignment[iElement].FontColor != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD), (g_Assignment[iElement].Font != -1));
-       EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC), (g_Assignment[iElement].Font != -1));
-
-       /* Update the colors of the color buttons */
-       UpdateButtonColor(hwndDlg, g, IDC_ADVAPPEARANCE_COLOR1_B, 0, g_Assignment[iElement].Color1);
-       UpdateButtonColor(hwndDlg, g, IDC_ADVAPPEARANCE_COLOR2_B, 1, g_Assignment[iElement].Color2);
-       UpdateButtonColor(hwndDlg, g, IDC_ADVAPPEARANCE_FONTCOLOR_B, 2, g_Assignment[iElement].FontColor);
-
-       if (g_Assignment[iElement].Size != -1)
-               SetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E, g->SchemeAdv.Size[g_Assignment[iElement].Size], FALSE);
-       else
-               SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E, TEXT(""));
-
-       hdcDlg = GetDC(hwndDlg);
-       if (g_Assignment[iElement].Font != -1)
-       {
-               LOGFONT lfFont = g->SchemeAdv.lfFont[g_Assignment[iElement].Font];
-
-               SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, lfFont.lfFaceName);
-               SetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, -MulDiv(g->SchemeAdv.lfFont[g_Assignment[iElement].Font].lfHeight, 72, GetDeviceCaps(hdcDlg, LOGPIXELSY)),FALSE);
-               SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, CB_FINDSTRINGEXACT, -1, (WPARAM)lfFont.lfFaceName);
-               SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_SETCHECK, g->SchemeAdv.lfFont[g_Assignment[iElement].Font].lfWeight == FW_BOLD?1:0, 0);
-               SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_SETCHECK, g->SchemeAdv.lfFont[g_Assignment[iElement].Font].lfItalic, 0);
-       }
-       else
-       {
-               SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, NULL);
-               SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, NULL);
-               SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_SETCHECK, 0, 0);
-               SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_SETCHECK, 0, 0);
-       }
-
-       ReleaseDC(hwndDlg, hdcDlg);
+    INT iElement;
+    HDC hdcDlg;
+
+    iElement = g->CurrentElement;
+
+    /* First enable / disable the controls */
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E), (g_Assignment[iElement].Size != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD), (g_Assignment[iElement].Size != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_T), (g_Assignment[iElement].Size != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_COLOR1_T), (g_Assignment[iElement].Color1 != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_COLOR2_T), (g_Assignment[iElement].Color2 != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_T), (g_Assignment[iElement].Font != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_C), (g_Assignment[iElement].Font != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_T), (g_Assignment[iElement].Font != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E), (g_Assignment[iElement].Font != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTCOLOR_T), (g_Assignment[iElement].FontColor != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD), (g_Assignment[iElement].Font != -1));
+    EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC), (g_Assignment[iElement].Font != -1));
+
+    /* Update the colors of the color buttons */
+    UpdateButtonColor(hwndDlg, g, IDC_ADVAPPEARANCE_COLOR1_B, 0, g_Assignment[iElement].Color1);
+    UpdateButtonColor(hwndDlg, g, IDC_ADVAPPEARANCE_COLOR2_B, 1, g_Assignment[iElement].Color2);
+    UpdateButtonColor(hwndDlg, g, IDC_ADVAPPEARANCE_FONTCOLOR_B, 2, g_Assignment[iElement].FontColor);
+
+    if (g_Assignment[iElement].Size != -1)
+        SetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E,  SchemeGetMetric(&g->SchemeAdv, g_Assignment[iElement].Size), FALSE);
+    else
+        SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E, TEXT(""));
+
+    hdcDlg = GetDC(hwndDlg);
+    if (g_Assignment[iElement].Font != -1)
+    {
+        PLOGFONTW plfFont = SchemeGetFont(&g->SchemeAdv, g_Assignment[iElement].Font);
+
+        SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, plfFont->lfFaceName);
+        SetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, -MulDiv(plfFont->lfHeight, 72, GetDeviceCaps(hdcDlg, LOGPIXELSY)), FALSE);
+        SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, CB_FINDSTRINGEXACT, -1, (WPARAM)plfFont->lfFaceName);
+        SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_SETCHECK, plfFont->lfWeight == FW_BOLD?1:0, 0);
+        SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_SETCHECK, plfFont->lfItalic, 0);
+    }
+    else
+    {
+        SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, NULL);
+        SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, NULL);
+        SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_SETCHECK, 0, 0);
+        SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_SETCHECK, 0, 0);
+    }
+
+    ReleaseDC(hwndDlg, hdcDlg);
 }
 
 
 static VOID
 SaveCurrentValues(HWND hwndDlg, GLOBALS *g)
 {
-       BOOL bTranslated;
-       HDC hdcDlg = GetDC(hwndDlg);
-
-       if (g_Assignment[g->CurrentElement].Size != -1)
-       {
-               g->SchemeAdv.Size[g_Assignment[g->CurrentElement].Size] = GetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E, &bTranslated, FALSE);
-       }
-
-       if (g_Assignment[g->CurrentElement].Font != -1)
-       {
-               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight = -MulDiv(GetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, &bTranslated, FALSE), GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
-               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight = (SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0) == 1) ? FW_BOLD : FW_NORMAL;
-               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic = (BYTE)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0);
-               GetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName, LF_FACESIZE * sizeof(TCHAR));
-       }
-
-       ReleaseDC(hwndDlg, hdcDlg);
+    BOOL bTranslated;
+    HDC hdcDlg = GetDC(hwndDlg);
+
+    if (g_Assignment[g->CurrentElement].Size != -1)
+    {
+        SchemeSetMetric(&g->SchemeAdv, g_Assignment[g->CurrentElement].Size, GetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E, &bTranslated, FALSE));
+    }
+
+    if (g_Assignment[g->CurrentElement].Font != -1)
+    {
+        PLOGFONTW plfFont = SchemeGetFont(&g->SchemeAdv, g_Assignment[g->CurrentElement].Font);
+        plfFont->lfHeight = -MulDiv(GetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, &bTranslated, FALSE), GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
+        plfFont->lfWeight = (SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0) == 1) ? FW_BOLD : FW_NORMAL;
+        plfFont->lfItalic = (BYTE)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0);
+        GetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, plfFont->lfFaceName, LF_FACESIZE);
+    }
+
+    ReleaseDC(hwndDlg, hdcDlg);
 }
 
 
@@ -286,57 +285,57 @@ SaveCurrentValues(HWND hwndDlg, GLOBALS *g)
 static BOOL
 GetColor(HWND hwndDlg, GLOBALS* g, INT nButton)
 {
-       CHOOSECOLOR cc;
-       COLORREF crCustom[16] = { 0 };
-       COLORREF crColor;
-       INT ID = 0;
-       INT ColorIndex = 0;
-
-       /* Get the color index from the element index and button number */
-       switch (nButton)
-       {
-               case 0:
-                       ColorIndex = g_Assignment[g->CurrentElement].Color1;
-                       ID = IDC_ADVAPPEARANCE_COLOR1_B;
-                       break;
-
-               case 1:
-                       ColorIndex = g_Assignment[g->CurrentElement].Color2;
-                       ID = IDC_ADVAPPEARANCE_COLOR2_B;
-                       break;
-
-               case 2:
-                       ColorIndex = g_Assignment[g->CurrentElement].FontColor;
-                       ID = IDC_ADVAPPEARANCE_FONTCOLOR_B;
-                       break;
-       }
-
-       crColor = g->SchemeAdv.crColor[ColorIndex];
-
-       /* Prepare cc structure */
-       cc.lStructSize = sizeof(CHOOSECOLOR);
-       cc.hwndOwner = hwndDlg;
-       cc.hInstance = NULL;
-       cc.rgbResult = crColor;
-       cc.lpCustColors = crCustom;
-       cc.Flags = CC_ANYCOLOR | CC_FULLOPEN | CC_RGBINIT;
-       cc.lCustData = 0;
-       cc.lpfnHook = NULL;
-       cc.lpTemplateName = NULL;
-
-       /* Create the colorpicker */
-       if (ChooseColor(&cc))
-       {
-               g->SchemeAdv.crColor[ColorIndex] = cc.rgbResult;
-               if (crColor != cc.rgbResult)
-               {
-                       UpdateButtonColor(hwndDlg, g, ID, nButton, ColorIndex);
-                       SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                       return TRUE;
-               }
-       }
-
-       return FALSE;
+    CHOOSECOLOR cc;
+    COLORREF crCustom[16] = { 0 };
+    COLORREF crColor;
+    INT ID = 0;
+    INT ColorIndex = 0;
+
+    /* Get the color index from the element index and button number */
+    switch (nButton)
+    {
+        case 0:
+            ColorIndex = g_Assignment[g->CurrentElement].Color1;
+            ID = IDC_ADVAPPEARANCE_COLOR1_B;
+            break;
+
+        case 1:
+            ColorIndex = g_Assignment[g->CurrentElement].Color2;
+            ID = IDC_ADVAPPEARANCE_COLOR2_B;
+            break;
+
+        case 2:
+            ColorIndex = g_Assignment[g->CurrentElement].FontColor;
+            ID = IDC_ADVAPPEARANCE_FONTCOLOR_B;
+            break;
+    }
+
+    crColor = g->SchemeAdv.crColor[ColorIndex];
+
+    /* Prepare cc structure */
+    cc.lStructSize = sizeof(CHOOSECOLOR);
+    cc.hwndOwner = hwndDlg;
+    cc.hInstance = NULL;
+    cc.rgbResult = crColor;
+    cc.lpCustColors = crCustom;
+    cc.Flags = CC_ANYCOLOR | CC_FULLOPEN | CC_RGBINIT;
+    cc.lCustData = 0;
+    cc.lpfnHook = NULL;
+    cc.lpTemplateName = NULL;
+
+    /* Create the colorpicker */
+    if (ChooseColor(&cc))
+    {
+        g->SchemeAdv.crColor[ColorIndex] = cc.rgbResult;
+        if (crColor != cc.rgbResult)
+        {
+            UpdateButtonColor(hwndDlg, g, ID, nButton, ColorIndex);
+            SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
+            return TRUE;
+        }
+    }
+
+    return FALSE;
 }
 
 
@@ -344,103 +343,102 @@ GetColor(HWND hwndDlg, GLOBALS* g, INT nButton)
 static VOID
 AdvAppearanceDlg_Init(HWND hwndDlg, GLOBALS *g)
 {
-       INT i, iElement, iListIndex, iDeskIndex = 0;
-       TCHAR tstrText[80];
-       LOGFONT lfFont;
-       LOGFONT lfButtonFont;
-       HFONT hMyFont;
-       HDC hScreenDC;
-       TCHAR Size[4];
-
-       /* Copy the current theme values */
-       g->SchemeAdv = g->Scheme;
-
-       SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-
-
-       /* Add the elements to the combo */
-       for (iElement = 0; iElement < NUM_ELEMENTS; iElement++)
-       {
-               LoadString(hApplet, IDS_ELEMENT_1 + iElement, (LPTSTR)&tstrText, 79);
-               iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_ADDSTRING, 0, (LPARAM)&tstrText);
-               SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_SETITEMDATA, (WPARAM)iListIndex, (LPARAM)iElement);
-       }
-
-       /* Get the list index of the desktop element */
-       for (iListIndex = 0; iListIndex < NUM_ELEMENTS; iListIndex++)
-       {
-               iElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0);
-               if (iElement == 0)
-               {
-                       iDeskIndex = iListIndex;
-                       break;
-               }
-       }
-
-       SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_SETCURSEL, iDeskIndex, 0);
-
-       /* Create font for bold button */
-       lfButtonFont = g->Scheme.lfFont[FONT_DIALOG];
-       lfButtonFont.lfWeight = FW_BOLD;
-       lfButtonFont.lfItalic = FALSE;
-       hMyFont = CreateFontIndirect(&lfButtonFont);
-       if (hMyFont)
-       {
-               if (g->hBoldFont)
-                       DeleteObject(g->hBoldFont);
-
-               g->hBoldFont = hMyFont;
-       }
-
-       /* Create font for italic button */
-       lfButtonFont.lfWeight = FW_REGULAR;
-       lfButtonFont.lfItalic = TRUE;
-       hMyFont = CreateFontIndirect(&lfButtonFont);
-       if (hMyFont)
-       {
-               if (g->hItalicFont)
-                       DeleteObject(g->hItalicFont);
-
-               g->hItalicFont = hMyFont;
-       }
-
-       /* Set the fonts for the font style buttons */
-       SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, WM_SETFONT, (WPARAM)g->hBoldFont, (LPARAM)TRUE);
-       SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, WM_SETFONT, (WPARAM)g->hItalicFont, (LPARAM)TRUE);
-
-       /* Draw Bitmaps for the colorbuttons */
-       InitColorButtons(hwndDlg, g);
-
-       /* Make the UpDown control count correctly */
-       SendMessage(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD), UDM_SETRANGE, 0L, MAKELONG (200, 1));
-
-       /* Fill font selection combo */
-       lfFont.lfCharSet = DEFAULT_CHARSET;
-       lfFont.lfFaceName[0] = (TCHAR)0;
-       lfFont.lfPitchAndFamily = 0;
-       hScreenDC = GetDC(0);
-       EnumFontFamiliesEx(hScreenDC, &lfFont, (FONTENUMPROC)EnumFontFamExProc, (LPARAM)GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_C), 0);
-       ReleaseDC(0, hScreenDC);
-
-       /* Fill font size combo */
-       for (i = 6; i <= 24; i++)
-       {
-               wsprintf(Size, TEXT("%d"), i);
-               SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, CB_ADDSTRING, 0, (LPARAM)&Size);
-       }
-
-       /* Update the controls */
-       iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETCURSEL, 0, 0);
-       g->CurrentElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0);
-       UpdateControls(hwndDlg, g);
+    INT i, iElement, iListIndex, iDeskIndex = 0;
+    TCHAR tstrText[80];
+    LOGFONT lfFont;
+    LOGFONT lfButtonFont;
+    HFONT hMyFont;
+    HDC hScreenDC;
+    TCHAR Size[4];
+
+    /* Copy the current theme values */
+    g->SchemeAdv = g->Scheme;
+
+    SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
+
+    /* Add the elements to the combo */
+    for (iElement = 0; iElement < NUM_ELEMENTS; iElement++)
+    {
+        LoadString(hApplet, IDS_ELEMENT_0 + iElement, (LPTSTR)&tstrText, 79);
+        iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_ADDSTRING, 0, (LPARAM)&tstrText);
+        SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_SETITEMDATA, (WPARAM)iListIndex, (LPARAM)iElement);
+    }
+
+    /* Get the list index of the desktop element */
+    for (iListIndex = 0; iListIndex < NUM_ELEMENTS; iListIndex++)
+    {
+        iElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0);
+        if (iElement == 0)
+        {
+            iDeskIndex = iListIndex;
+            break;
+        }
+    }
+
+    SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_SETCURSEL, iDeskIndex, 0);
+
+    /* Create font for bold button */
+    lfButtonFont = g->Scheme.ncMetrics.lfMessageFont;
+    lfButtonFont.lfWeight = FW_BOLD;
+    lfButtonFont.lfItalic = FALSE;
+    hMyFont = CreateFontIndirect(&lfButtonFont);
+    if (hMyFont)
+    {
+        if (g->hBoldFont)
+            DeleteObject(g->hBoldFont);
+
+        g->hBoldFont = hMyFont;
+    }
+
+    /* Create font for italic button */
+    lfButtonFont.lfWeight = FW_REGULAR;
+    lfButtonFont.lfItalic = TRUE;
+    hMyFont = CreateFontIndirect(&lfButtonFont);
+    if (hMyFont)
+    {
+        if (g->hItalicFont)
+            DeleteObject(g->hItalicFont);
+
+        g->hItalicFont = hMyFont;
+    }
+
+    /* Set the fonts for the font style buttons */
+    SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, WM_SETFONT, (WPARAM)g->hBoldFont, (LPARAM)TRUE);
+    SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, WM_SETFONT, (WPARAM)g->hItalicFont, (LPARAM)TRUE);
+
+    /* Draw Bitmaps for the colorbuttons */
+    InitColorButtons(hwndDlg, g);
+
+    /* Make the UpDown control count correctly */
+    SendMessage(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD), UDM_SETRANGE, 0L, MAKELONG (200, 1));
+
+    /* Fill font selection combo */
+    lfFont.lfCharSet = DEFAULT_CHARSET;
+    lfFont.lfFaceName[0] = (TCHAR)0;
+    lfFont.lfPitchAndFamily = 0;
+    hScreenDC = GetDC(0);
+    EnumFontFamiliesEx(hScreenDC, &lfFont, (FONTENUMPROC)EnumFontFamExProc, (LPARAM)GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_C), 0);
+    ReleaseDC(0, hScreenDC);
+
+    /* Fill font size combo */
+    for (i = 6; i <= 24; i++)
+    {
+        StringCbPrintf(Size, sizeof(Size), TEXT("%d"), i);
+        SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, CB_ADDSTRING, 0, (LPARAM)&Size);
+    }
+
+    /* Update the controls */
+    iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETCURSEL, 0, 0);
+    g->CurrentElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0);
+    UpdateControls(hwndDlg, g);
 }
 
 
 static VOID
 AdvAppearanceDlg_CleanUp(HWND hwndDlg, GLOBALS* g)
 {
-       DeleteObject(g->hBoldFont);
-       DeleteObject(g->hItalicFont);
+    DeleteObject(g->hBoldFont);
+    DeleteObject(g->hItalicFont);
 }
 
 
@@ -502,280 +500,158 @@ GetSelectedComboInt(HWND hwnd, INT id)
     return _ttoi(szBuffer);
 }
 
-
-static INT
-GetEditedComboInt(HWND hwnd, INT id)
+INT_PTR CALLBACK
+AdvAppearanceDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
-    INT nCount;
-    BOOL bTranslated;
+    INT iSelection, iProperty;
+    GLOBALS* g;
+    PLOGFONTW plfFont;
 
-    nCount = GetDlgItemInt(hwnd, id, &bTranslated, FALSE);
-    if (bTranslated == FALSE)
-        return 12;
+    g = (GLOBALS*)GetWindowLongPtr(hwndDlg, DWLP_USER);
 
-    return nCount;
-}
+    switch (uMsg)
+    {
+        case WM_INITDIALOG:
+            g = (GLOBALS*)lParam;
+            SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)g);
+            AdvAppearanceDlg_Init(hwndDlg, g);
+            break;
+
+        case WM_DESTROY:
+            AdvAppearanceDlg_CleanUp(hwndDlg, g);
+            break;
 
+        case WM_COMMAND:
+            if (g == NULL)
+                return TRUE;
+
+            switch(LOWORD(wParam))
+            {
+                case IDOK:
+                    SaveCurrentValues(hwndDlg, g);
+                    EndDialog(hwndDlg, IDOK);
+                    break;
+
+                case IDCANCEL:
+                    g->SchemeAdv = g->Scheme;
+                    EndDialog(hwndDlg, IDCANCEL);
+                    break;
+
+                case IDC_APPEARANCE_PREVIEW:
+                    SaveCurrentValues(hwndDlg, g);
+                    SelectComboByElement(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, lParam);
+                    g->CurrentElement = (INT)lParam;
+                    UpdateControls(hwndDlg, g);
+                    break;
+
+                case IDC_ADVAPPEARANCE_ELEMENT:
+                    if (HIWORD(wParam) == CBN_SELCHANGE)
+                    {
+                        SaveCurrentValues(hwndDlg, g);
+                        iSelection = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETCURSEL, 0, 0);
+                        g->CurrentElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, iSelection, 0);
+                        UpdateControls(hwndDlg, g);
+                    }
+                    break;
+
+                case IDC_ADVAPPEARANCE_SIZE_E:
+                    if (HIWORD(wParam) == EN_CHANGE)
+                    {
+                        iProperty = g_Assignment[g->CurrentElement].Size;
+                        if (iProperty == -1)
+                            return TRUE;
+
+                        iSelection = LOWORD(SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD, UDM_GETPOS,0,0L));
+                        SchemeSetMetric(&g->SchemeAdv, iProperty, iSelection);
+                        SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETSIZE, iProperty, iSelection);
+
+                        iProperty = g_Assignment[g->CurrentElement].Size2;
+                        if (iProperty != -1)
+                            SchemeSetMetric(&g->SchemeAdv, iProperty, iSelection);
+                    }
+                    break;
+
+                case IDC_ADVAPPEARANCE_FONT_C:
+                    if (HIWORD(wParam) == CBN_SELCHANGE)
+                    {
+                        iProperty = g_Assignment[g->CurrentElement].Font;
+                        if (iProperty == -1)
+                            return TRUE;
+
+                        plfFont = SchemeGetFont(&g->SchemeAdv, iProperty);
+                        GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, plfFont->lfFaceName);
+                        SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETFONT, iProperty, (LPARAM)plfFont);
+                    }
+                    break;
+
+                case IDC_ADVAPPEARANCE_FONTSIZE_E:
+                    if ((HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == CBN_EDITCHANGE))
+                    {
+                        HDC hdcDlg;
+
+                        iProperty =  g_Assignment[g->CurrentElement].Font;
+                        if (iProperty == -1)
+                            return TRUE;
+
+                        hdcDlg = GetDC(hwndDlg);
+
+                        plfFont = SchemeGetFont(&g->SchemeAdv, iProperty);
+                        iSelection = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
+                        plfFont->lfHeight = -MulDiv(iSelection , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
+                        SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
+
+                        ReleaseDC(hwndDlg, hdcDlg);
+                    }
+                    break;
+
+                case IDC_ADVAPPEARANCE_FONTBOLD:
+                    if (HIWORD(wParam) == BN_CLICKED)
+                    {
+                        iProperty = g_Assignment[g->CurrentElement].Font;
+                        if (iProperty == -1)
+                            return TRUE;
+
+                        plfFont = SchemeGetFont(&g->SchemeAdv, iProperty);
+                        iSelection = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0);
+                        plfFont->lfWeight = (iSelection == BST_CHECKED) ? FW_BOLD : FW_NORMAL;
+                        SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETFONT, iProperty, (LPARAM)plfFont);
+                    }
+                    break;
+
+                case IDC_ADVAPPEARANCE_FONTITALIC:
+                    if (HIWORD(wParam) == BN_CLICKED)
+                    {
+                        iProperty = g_Assignment[g->CurrentElement].Font;
+                        if (iProperty == -1)
+                            return TRUE;
+
+                        plfFont = SchemeGetFont(&g->SchemeAdv, iProperty);
+                        iSelection = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0);
+                        plfFont->lfItalic = (iSelection == BST_CHECKED) ? TRUE : FALSE;
+                        SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETFONT, iProperty, (LPARAM)plfFont);
+                    }
+                    break;
+
+                case IDC_ADVAPPEARANCE_COLOR1_B:
+                    GetColor(hwndDlg, g, 0);
+                    break;
+
+                case IDC_ADVAPPEARANCE_COLOR2_B:
+                    GetColor(hwndDlg, g, 1);
+                    break;
+
+                case IDC_ADVAPPEARANCE_FONTCOLOR_B:
+                    GetColor(hwndDlg, g, 2);
+                    break;
+
+                default:
+                    return FALSE;
+            }
+            break;
 
+        default:
+            return FALSE;
+    }
 
-INT_PTR CALLBACK
-AdvAppearanceDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-       INT iListIndex;
-       GLOBALS* g;
-
-       g = (GLOBALS*)GetWindowLongPtr(hwndDlg, DWLP_USER);
-
-       switch (uMsg)
-       {
-               case WM_INITDIALOG:
-                       g = (GLOBALS*)lParam;
-                       SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)g);
-                       AdvAppearanceDlg_Init(hwndDlg, g);
-                       break;
-
-               case WM_DESTROY:
-                       AdvAppearanceDlg_CleanUp(hwndDlg, g);
-                       break;
-
-               case WM_COMMAND:
-                       switch(LOWORD(wParam))
-                       {
-                               case IDOK:
-                                       SaveCurrentValues(hwndDlg, g);
-                                       EndDialog(hwndDlg, IDOK);
-                                       break;
-
-                               case IDCANCEL:
-                                       g->SchemeAdv = g->Scheme;
-                                       EndDialog(hwndDlg, IDCANCEL);
-                                       break;
-
-                               case IDC_APPEARANCE_PREVIEW:
-                                       SaveCurrentValues(hwndDlg, g);
-                                       SelectComboByElement(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, lParam);
-                                       g->CurrentElement = (INT)lParam;
-                                       UpdateControls(hwndDlg, g);
-                                       break;
-
-                               case IDC_ADVAPPEARANCE_ELEMENT:
-                                       if (HIWORD(wParam) == CBN_SELCHANGE)
-                                       {
-                                               SaveCurrentValues(hwndDlg, g);
-                                               iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETCURSEL, 0, 0);
-                                               g->CurrentElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0);
-                                               UpdateControls(hwndDlg, g);
-                                       }
-                                       break;
-
-                               case IDC_ADVAPPEARANCE_SIZE_E:
-                                       if (g && HIWORD(wParam) == EN_CHANGE)
-                                       {
-                                               INT i = (INT)LOWORD(SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD, UDM_GETPOS,0,0L));
-
-                                               switch (g->CurrentElement)
-                                               {
-                                                       case IDX_INACTIVE_CAPTION:
-                                                       case IDX_ACTIVE_CAPTION:
-                                                       case IDX_CAPTION_BUTTON:
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCYCAPTION, 0, i);
-                                                               break;
-
-                                                       case IDX_MENU:
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCYMENU, 0, i);
-                                                               break;
-
-                                                       case IDX_SCROLLBAR:
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCXSCROLLBAR, 0, i);
-                                                               break;
-
-                                                       case IDX_INACTIVE_BORDER:
-                                                       case IDX_ACTIVE_BORDER:
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCYSIZEFRAME, 0, i);
-                                                               break;
-                                               }
-                                       }
-                                       break;
-
-                               case IDC_ADVAPPEARANCE_FONT_C:
-                                       if (g && HIWORD(wParam) == CBN_SELCHANGE)
-                                       {
-                                               switch (g->CurrentElement)
-                                               {
-                                                       case IDX_INACTIVE_CAPTION:
-                                                       case IDX_ACTIVE_CAPTION:
-                                                               GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C,
-                                                                       g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName);
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_MENU:
-                                                               GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C,
-                                                                       g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName);
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_DIALOG:
-                                                               GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C,
-                                                                       g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName);
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-                                               }
-                                       }
-                                       break;
-
-                               case IDC_ADVAPPEARANCE_FONTSIZE_E:
-                                       if (g && HIWORD(wParam) == CBN_SELCHANGE)
-                                       {
-                                               HDC hdcDlg = GetDC(hwndDlg);
-                                               INT i;
-
-                                               switch (g->CurrentElement)
-                                               {
-                                                       case IDX_INACTIVE_CAPTION:
-                                                       case IDX_ACTIVE_CAPTION:
-                                                               i = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-                                                                       -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_MENU:
-                                                               i = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-                                                                       -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_DIALOG:
-                                                               i = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-                                                                       -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-                                               }
-
-                                               ReleaseDC(hwndDlg, hdcDlg);
-                                       }
-                                       else if (g && HIWORD(wParam) == CBN_EDITCHANGE)
-                                       {
-                                               HDC hdcDlg = GetDC(hwndDlg);
-                                               INT i;
-
-                                               switch (g->CurrentElement)
-                                               {
-                                                       case IDX_INACTIVE_CAPTION:
-                                                       case IDX_ACTIVE_CAPTION:
-                                                               i = GetEditedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-                                                                       -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_MENU:
-                                                               i = GetEditedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-                                                                       -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_DIALOG:
-                                                               i = GetEditedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight =
-                                                                       -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72);
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-                                               }
-
-                                               ReleaseDC(hwndDlg, hdcDlg);
-                                       }
-                                       break;
-
-                               case IDC_ADVAPPEARANCE_FONTBOLD:
-                                       if (g && HIWORD(wParam) == BN_CLICKED)
-                                       {
-                                               INT i;
-
-                                               switch (g->CurrentElement)
-                                               {
-                                                       case IDX_INACTIVE_CAPTION:
-                                                       case IDX_ACTIVE_CAPTION:
-                                                               i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight =
-                                                                       (i == BST_CHECKED) ? FW_BOLD : FW_NORMAL;
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_MENU:
-                                                               i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0);
-
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight =
-                                                                       (i == BST_CHECKED) ? FW_BOLD : FW_NORMAL;
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_DIALOG:
-                                                               i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight =
-                                                                       (i == BST_CHECKED) ? FW_BOLD : FW_NORMAL;
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-                                               }
-                                       }
-                                       break;
-
-                               case IDC_ADVAPPEARANCE_FONTITALIC:
-                                       if (g && HIWORD(wParam) == BN_CLICKED)
-                                       {
-                                               INT i;
-
-                                               switch (g->CurrentElement)
-                                               {
-                                                       case IDX_INACTIVE_CAPTION:
-                                                       case IDX_ACTIVE_CAPTION:
-                                                               i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic =
-                                                                       (i == BST_CHECKED) ? TRUE : FALSE;
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_MENU:
-                                                               i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic =
-                                                                       (i == BST_CHECKED) ? TRUE : FALSE;
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-
-                                                       case IDX_DIALOG:
-                                                               i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0);
-                                                               g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic =
-                                                                       (i == BST_CHECKED) ? TRUE : FALSE;
-                                                               SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv);
-                                                               break;
-                                               }
-                                       }
-                                       break;
-
-                               case IDC_ADVAPPEARANCE_COLOR1_B:
-                                       GetColor(hwndDlg, g, 0);
-                                       break;
-
-                               case IDC_ADVAPPEARANCE_COLOR2_B:
-                                       GetColor(hwndDlg, g, 1);
-                                       break;
-
-                               case IDC_ADVAPPEARANCE_FONTCOLOR_B:
-                                       GetColor(hwndDlg, g, 2);
-                                       break;
-
-                               default:
-                                       return FALSE;
-                       }
-                       break;
-
-               default:
-                       return FALSE;
-       }
-
-       return TRUE;
+    return TRUE;
 }