1 /* $Id: advappdlg.c 24836 2007-02-12 03:12:56Z tkreuzer $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS Display Control Panel
5 * FILE: dll/cpl/desk/advappdlg.c
6 * PURPOSE: Advanced appearance dialog
8 * PROGRAMMER: Timo Kreuzer (timo[dot]kreuzer[at]web[dot]de)
14 #include "appearance.h"
17 /******************************************************************************/
29 /* This const assigns the color and metric numbers to the elements from the elements list */
31 /* Size 1 (width) Size 2 (height) Color 1 Color 2 Font Fontcolor */
32 const ASSIGNMENT g_Assignment
[NUM_ELEMENTS
] =
33 { {-1, -1, COLOR_DESKTOP
, -1, -1, -1}, /* -Desktop */
34 {SIZE_CAPTION_Y
, -1, COLOR_INACTIVECAPTION
, COLOR_GRADIENTINACTIVECAPTION
, FONT_CAPTION
, -1}, /* inactive window caption */
35 {SIZE_BORDER_X
, SIZE_BORDER_Y
, COLOR_INACTIVEBORDER
, -1, -1, -1}, /* inactive window border */
36 {SIZE_CAPTION_Y
, -1, COLOR_ACTIVECAPTION
, COLOR_GRADIENTACTIVECAPTION
, FONT_CAPTION
, COLOR_CAPTIONTEXT
}, /* -active window caption */
37 {SIZE_BORDER_X
, SIZE_BORDER_Y
, COLOR_ACTIVEBORDER
, -1, -1, -1}, /* active window border */
38 {SIZE_MENU_SIZE_X
,SIZE_MENU_Y
, COLOR_MENU
, -1, FONT_MENU
, COLOR_MENUTEXT
}, /* menu */
39 {SIZE_MENU_SIZE_X
,SIZE_MENU_Y
, COLOR_HIGHLIGHT
, -1, FONT_HILIGHT
, COLOR_HIGHLIGHTTEXT
},/* marked element */
40 {-1, -1, COLOR_WINDOW
, -1 /*COLOR_WINDOWFRAME*/, -1, COLOR_WINDOWTEXT
}, /* window */
41 {SIZE_SCROLL_X
, SIZE_SCROLL_Y
, COLOR_SCROLLBAR
, -1, -1, -1}, /* scroll bar */
42 {-1, -1, COLOR_3DFACE
, -1, -1, COLOR_BTNTEXT
}, /* 3d objects */
43 {SIZE_SMCAPTION_Y
,-1, -1, -1, FONT_SMCAPTION
, -1}, /* palette window caption */
44 {-1, -1, -1, -1, -1, -1}, /* symbol caption FIXME: Access? */
45 {SIZE_CAPTION_Y
, -1, -1, -1, -1, -1}, /* caption bar */
46 {-1, -1, -1, -1, -1, COLOR_GRAYTEXT
}, /* inactive menu item FIXME: Access? */
47 {-1, -1, -1, -1, FONT_DIALOG
, COLOR_WINDOWTEXT
}, /* dialog */
48 {-1, -1, -1, -1, -1, -1}, /* scrollbar controls FIXME: Access? */
49 {-1, -1, COLOR_APPWORKSPACE
, -1, -1, -1}, /* application background */
50 {-1, -1, -1, -1, -1, -1}, /* small caption bar FIXME: Access? */
51 {SIZE_ICON_SPC_X
, -1, -1, -1, -1, -1}, /* symbol distance horiz. */
52 {SIZE_ICON_SPC_Y
, -1, -1, -1, -1, -1}, /* symbol distance vert. */
53 {-1, -1, COLOR_INFOBK
, -1, FONT_INFO
, COLOR_INFOTEXT
}, /* quickinfo */
54 {SIZE_ICON_X
, SIZE_ICON_Y
, -1, -1, FONT_ICON
, -1}}; /* symbol */
56 /******************************************************************************/
58 /* Draw the current color on the color picker buttons */
60 UpdateButtonColor(HWND hwndDlg
, GLOBALS
* g
, INT ID
, INT nButton
, INT nColor
)
62 HDC hdcColorButton
, hdcCompat
;
70 /* Create a DC to draw on */
71 hwndColorButton
= GetDlgItem(hwndDlg
, ID
);
72 hdcColorButton
= GetDC(hwndColorButton
);
73 hdcCompat
= CreateCompatibleDC(hdcColorButton
);
74 ReleaseDC(hwndColorButton
, hdcColorButton
);
76 /* Select the button image to it */
77 hgdiTmp
= SelectObject(hdcCompat
, g
->hbmpColor
[nButton
]);
79 /* Create a brush and draw the rectangle */
84 hbrush
= CreateSolidBrush(g
->ThemeAdv
.crColor
[nColor
]);
85 FillRect(hdcCompat
, &rect
, hbrush
);
88 /* hdcCompat is not needed anymore */
89 SelectObject(hdcCompat
,hgdiTmp
);
92 SendDlgItemMessage(hwndDlg
, ID
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)g
->hbmpColor
[nButton
]);
93 EnableWindow(GetDlgItem(hwndDlg
, ID
), TRUE
);
97 SendDlgItemMessage(hwndDlg
, ID
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)NULL
);
98 EnableWindow(GetDlgItem(hwndDlg
, ID
), FALSE
);
103 /* Create the basic bitmaps for the color picker buttons */
105 InitColorButtons(HWND hwndDlg
, GLOBALS
* g
)
108 HDC hdcColorButton
, hdcCompat
;
112 HWND hwndColorButton
;
114 THEME
*theme
= &g
->ThemeAdv
;
116 const POINT Points
[3] = {{29,6},{33,6},{31,8}};
118 hwndColorButton
= GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_COLOR1_B
);
119 hdcColorButton
= GetDC(hwndColorButton
);
120 for (i
= 0; i
<= 2; i
++)
122 /* Create a DC to draw on */
123 hdcCompat
= CreateCompatibleDC(hdcColorButton
);
125 /* Create the button image */
126 g
->hbmpColor
[i
] = CreateCompatibleBitmap(hdcColorButton
, 36, 15);
128 /* Select the button image to the DC */
129 hgdiTemp
= SelectObject(hdcCompat
, g
->hbmpColor
[i
]);
131 /* Draw the buttons background color */
136 hbrush
= CreateSolidBrush(theme
->crColor
[COLOR_BTNFACE
]);
137 FillRect(hdcCompat
, &rect
, hbrush
);
138 DeleteObject(hbrush
);
140 /* Draw the rectangle */
145 hbrush
= CreateSolidBrush(theme
->crColor
[COLOR_BTNTEXT
]);
146 FillRect(hdcCompat
, &rect
, hbrush
);
147 DeleteObject(hbrush
);
149 /* Draw left side of line */
150 hPen
= CreatePen(PS_SOLID
, 1, theme
->crColor
[COLOR_BTNSHADOW
]);
151 SelectObject(hdcCompat
, hPen
);
152 MoveToEx(hdcCompat
, 26, 1, NULL
);
153 LineTo(hdcCompat
, 26, 14);
154 SelectObject(hdcCompat
, GetStockObject(BLACK_PEN
));
157 /* Draw right side of line */
158 hPen
= CreatePen(PS_SOLID
, 1, theme
->crColor
[COLOR_BTNHIGHLIGHT
]);
159 SelectObject(hdcCompat
,hPen
);
160 MoveToEx(hdcCompat
, 27, 1, NULL
);
161 LineTo(hdcCompat
, 27, 14);
162 SelectObject(hdcCompat
, GetStockObject(BLACK_PEN
));
166 hPen
= CreatePen(PS_SOLID
, 1, theme
->crColor
[COLOR_BTNTEXT
]);
167 hbrush
= CreateSolidBrush(theme
->crColor
[COLOR_BTNTEXT
]);
168 SelectObject(hdcCompat
, hPen
);
169 SelectObject(hdcCompat
, hbrush
);
170 SetPolyFillMode(hdcCompat
, WINDING
);
172 /* FIXME: HACK, see Points definition */
173 Polygon(hdcCompat
, Points
, 3);
176 SelectObject(hdcCompat
,hgdiTemp
);
179 DeleteObject(hbrush
);
182 ReleaseDC(hwndColorButton
, hdcColorButton
);
184 /* Set the images of the buttons */
185 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_COLOR1_B
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)g
->hbmpColor
[0]);
186 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_COLOR2_B
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)g
->hbmpColor
[1]);
187 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTCOLOR_B
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)g
->hbmpColor
[2]);
191 /* This is the callback function to add the installed fonts to the font combo */
193 EnumFontFamExProc(ENUMLOGFONTEX
*lpelfe
, NEWTEXTMETRICEX
*lpntme
, DWORD dwFontType
, LPARAM lParam
)
195 /* Don't enumerate more than 100 fonts */
196 if (SendMessage((HWND
)lParam
, CB_GETCOUNT
, 0, 0) >= 100)
199 /* Only add the string once */
200 if (SendMessage((HWND
)lParam
, CB_FINDSTRINGEXACT
, -1, (WPARAM
)&(lpelfe
->elfLogFont
.lfFaceName
)) != CB_ERR
)
203 SendMessage((HWND
)lParam
, CB_ADDSTRING
, 0, (WPARAM
)&(lpelfe
->elfLogFont
.lfFaceName
));
209 /* Update all the controls with the current values for the selected screen element */
211 UpdateControls(HWND hwndDlg
, GLOBALS
*g
)
216 iElement
= g
->CurrentElement
;
218 /* First enable / disable the controls */
219 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_E
), (g_Assignment
[iElement
].Size
!= -1));
220 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_UD
), (g_Assignment
[iElement
].Size
!= -1));
221 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_T
), (g_Assignment
[iElement
].Size
!= -1));
222 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_COLOR1_T
), (g_Assignment
[iElement
].Color1
!= -1));
223 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_COLOR2_T
), (g_Assignment
[iElement
].Color2
!= -1));
224 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONT_T
), (g_Assignment
[iElement
].Font
!= -1));
225 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
), (g_Assignment
[iElement
].Font
!= -1));
226 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_T
), (g_Assignment
[iElement
].Font
!= -1));
227 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
), (g_Assignment
[iElement
].Font
!= -1));
228 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTCOLOR_T
), (g_Assignment
[iElement
].FontColor
!= -1));
229 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
), (g_Assignment
[iElement
].Font
!= -1));
230 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
), (g_Assignment
[iElement
].Font
!= -1));
232 /* Update the colors of the color buttons */
233 UpdateButtonColor(hwndDlg
, g
, IDC_ADVAPPEARANCE_COLOR1_B
, 0, g_Assignment
[iElement
].Color1
);
234 UpdateButtonColor(hwndDlg
, g
, IDC_ADVAPPEARANCE_COLOR2_B
, 1, g_Assignment
[iElement
].Color2
);
235 UpdateButtonColor(hwndDlg
, g
, IDC_ADVAPPEARANCE_FONTCOLOR_B
, 2, g_Assignment
[iElement
].FontColor
);
237 if (g_Assignment
[iElement
].Size
!= -1)
238 SetDlgItemInt(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_E
, g
->ThemeAdv
.Size
[g_Assignment
[iElement
].Size
], FALSE
);
240 SetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_E
, TEXT(""));
242 hdcDlg
= GetDC(hwndDlg
);
243 if (g_Assignment
[iElement
].Font
!= -1)
245 LOGFONT lfFont
= g
->ThemeAdv
.lfFont
[g_Assignment
[iElement
].Font
];
247 SetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
, lfFont
.lfFaceName
);
248 SetDlgItemInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
, -MulDiv(g
->ThemeAdv
.lfFont
[g_Assignment
[iElement
].Font
].lfHeight
, 72, GetDeviceCaps(hdcDlg
, LOGPIXELSY
)),FALSE
);
249 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
, CB_FINDSTRINGEXACT
, -1, (WPARAM
)lfFont
.lfFaceName
);
250 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_SETCHECK
, g
->ThemeAdv
.lfFont
[g_Assignment
[iElement
].Font
].lfWeight
== FW_BOLD
?1:0, 0);
251 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_SETCHECK
, g
->ThemeAdv
.lfFont
[g_Assignment
[iElement
].Font
].lfItalic
, 0);
255 SetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
, NULL
);
256 SetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
, NULL
);
257 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_SETCHECK
, 0, 0);
258 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_SETCHECK
, 0, 0);
261 ReleaseDC(hwndDlg
, hdcDlg
);
266 SaveCurrentValues(HWND hwndDlg
, GLOBALS
*g
)
269 HDC hdcDlg
= GetDC(hwndDlg
);
271 if (g_Assignment
[g
->CurrentElement
].Size
!= -1)
273 g
->ThemeAdv
.Size
[g_Assignment
[g
->CurrentElement
].Size
] = GetDlgItemInt(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_E
, &bTranslated
, FALSE
);
276 if (g_Assignment
[g
->CurrentElement
].Font
!= -1)
278 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
= -MulDiv(GetDlgItemInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
, &bTranslated
, FALSE
), GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
279 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfWeight
= (SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_GETCHECK
, 0, 0) == 1)?FW_BOLD
:FW_NORMAL
;
280 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfItalic
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_GETCHECK
, 0, 0);
281 GetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
, g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfFaceName
, LF_FACESIZE
* sizeof(TCHAR
));
284 ReleaseDC(hwndDlg
, hdcDlg
);
288 /* Select a color using a color picker */
290 GetColor(HWND hwndDlg
, GLOBALS
* g
, INT nButton
)
293 COLORREF crCustom
[16] = { 0 };
298 /* Get the color index from the element index and button number */
302 ColorIndex
= g_Assignment
[g
->CurrentElement
].Color1
;
303 ID
= IDC_ADVAPPEARANCE_COLOR1_B
;
307 ColorIndex
= g_Assignment
[g
->CurrentElement
].Color2
;
308 ID
= IDC_ADVAPPEARANCE_COLOR2_B
;
312 ColorIndex
= g_Assignment
[g
->CurrentElement
].FontColor
;
313 ID
= IDC_ADVAPPEARANCE_FONTCOLOR_B
;
317 crColor
= g
->ThemeAdv
.crColor
[ColorIndex
];
319 /* Prepare cc structure */
320 cc
.lStructSize
= sizeof(CHOOSECOLOR
);
321 cc
.hwndOwner
= hwndDlg
;
323 cc
.rgbResult
= crColor
;
324 cc
.lpCustColors
= crCustom
;
325 cc
.Flags
= CC_ANYCOLOR
| CC_FULLOPEN
| CC_RGBINIT
;
328 cc
.lpTemplateName
= NULL
;
330 /* Create the colorpicker */
331 if (ChooseColor(&cc
))
333 g
->ThemeAdv
.crColor
[ColorIndex
] = cc
.rgbResult
;
334 if (crColor
!= cc
.rgbResult
)
336 UpdateButtonColor(hwndDlg
, g
, ID
, nButton
, ColorIndex
);
337 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
346 /* Initialize the advanced appearance dialog */
348 AdvAppearanceDlg_Init(HWND hwndDlg
, GLOBALS
*g
)
350 INT i
, iElement
, iListIndex
, iDeskIndex
= 0;
353 LOGFONT lfButtonFont
;
358 /* Copy the current theme values */
359 g
->ThemeAdv
= g
->Theme
;
361 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
364 /* Add the elements to the combo */
365 for (iElement
= 0; iElement
< NUM_ELEMENTS
; iElement
++)
367 LoadString(hApplet
, IDS_ELEMENT_1
+ iElement
, (LPTSTR
)&tstrText
, 79);
368 iListIndex
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_ADDSTRING
, 0, (LPARAM
)&tstrText
);
369 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_SETITEMDATA
, (WPARAM
)iListIndex
, (LPARAM
)iElement
);
372 /* Get the list index of the desktop element */
373 for (iListIndex
= 0; iListIndex
< NUM_ELEMENTS
; iListIndex
++)
375 iElement
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETITEMDATA
, (WPARAM
)iListIndex
, 0);
378 iDeskIndex
= iListIndex
;
383 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_SETCURSEL
, iDeskIndex
, 0);
385 /* Create font for bold button */
386 lfButtonFont
= g
->Theme
.lfFont
[FONT_DIALOG
];
387 lfButtonFont
.lfWeight
= FW_BOLD
;
388 lfButtonFont
.lfItalic
= FALSE
;
389 hMyFont
= CreateFontIndirect(&lfButtonFont
);
393 DeleteObject(g
->hBoldFont
);
395 g
->hBoldFont
= hMyFont
;
398 /* Create font for italic button */
399 lfButtonFont
.lfWeight
= FW_REGULAR
;
400 lfButtonFont
.lfItalic
= TRUE
;
401 hMyFont
= CreateFontIndirect(&lfButtonFont
);
405 DeleteObject(g
->hItalicFont
);
407 g
->hItalicFont
= hMyFont
;
410 /* Set the fonts for the font style buttons */
411 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, WM_SETFONT
, (WPARAM
)g
->hBoldFont
, (LPARAM
)TRUE
);
412 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, WM_SETFONT
, (WPARAM
)g
->hItalicFont
, (LPARAM
)TRUE
);
414 /* Draw Bitmaps for the colorbuttons */
415 InitColorButtons(hwndDlg
, g
);
417 /* Make the UpDown control count correctly */
418 SendMessage(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_UD
), UDM_SETRANGE
, 0L, MAKELONG (200, 1));
420 /* Fill font selection combo */
421 lfFont
.lfCharSet
= DEFAULT_CHARSET
;
422 lfFont
.lfFaceName
[0] = (TCHAR
)0;
423 lfFont
.lfPitchAndFamily
= 0;
424 hScreenDC
= GetDC(0);
425 EnumFontFamiliesEx(hScreenDC
, &lfFont
, (FONTENUMPROC
)EnumFontFamExProc
, (LPARAM
)GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
), 0);
426 ReleaseDC(0, hScreenDC
);
428 /* Fill font size combo */
429 for (i
= 6; i
<= 24; i
++)
431 wsprintf(Size
, TEXT("%d"), i
);
432 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
, CB_ADDSTRING
, 0, (LPARAM
)&Size
);
435 /* Update the controls */
436 iListIndex
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETCURSEL
, 0, 0);
437 g
->CurrentElement
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETITEMDATA
, (WPARAM
)iListIndex
, 0);
438 UpdateControls(hwndDlg
, g
);
443 AdvAppearanceDlg_CleanUp(HWND hwndDlg
, GLOBALS
* g
)
445 DeleteObject(g
->hBoldFont
);
446 DeleteObject(g
->hItalicFont
);
451 SelectComboByElement(HWND hwnd
, INT id
, LPARAM lParam
)
456 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETCOUNT
, 0, 0);
457 if (nCount
== CB_ERR
)
460 for (i
= 0; i
< nCount
; i
++)
462 if (SendDlgItemMessage(hwnd
, id
, CB_GETITEMDATA
, (WPARAM
)i
, 0) == lParam
)
464 SendDlgItemMessage(hwnd
, id
, CB_SETCURSEL
, (WPARAM
)i
, 0);
472 GetSelectedComboText(HWND hwnd
, INT id
, LPWSTR lpStr
)
476 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETCURSEL
, 0, 0);
477 if (nCount
== CB_ERR
)
483 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETLBTEXT
, (WPARAM
)nCount
, (LPARAM
)lpStr
);
484 if (nCount
== CB_ERR
)
492 GetSelectedComboInt(HWND hwnd
, INT id
)
497 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETCURSEL
, 0, 0);
498 if (nCount
== CB_ERR
)
501 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETLBTEXT
, (WPARAM
)nCount
, (LPARAM
)szBuffer
);
502 if (nCount
== CB_ERR
)
505 return _ttoi(szBuffer
);
510 GetEditedComboInt(HWND hwnd
, INT id
)
515 nCount
= GetDlgItemInt(hwnd
, id
, &bTranslated
, FALSE
);
516 if (bTranslated
== FALSE
)
525 AdvAppearanceDlgProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
530 g
= (GLOBALS
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
535 g
= (GLOBALS
*)lParam
;
536 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)g
);
537 AdvAppearanceDlg_Init(hwndDlg
, g
);
541 AdvAppearanceDlg_CleanUp(hwndDlg
, g
);
545 switch(LOWORD(wParam
))
548 SaveCurrentValues(hwndDlg
, g
);
549 EndDialog(hwndDlg
, IDOK
);
553 g
->ThemeAdv
= g
->Theme
;
554 EndDialog(hwndDlg
, IDCANCEL
);
557 case IDC_APPEARANCE_PREVIEW
:
558 SaveCurrentValues(hwndDlg
, g
);
559 SelectComboByElement(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, lParam
);
560 g
->CurrentElement
= (INT
)lParam
;
561 UpdateControls(hwndDlg
, g
);
564 case IDC_ADVAPPEARANCE_ELEMENT
:
565 if (HIWORD(wParam
) == CBN_SELCHANGE
)
567 SaveCurrentValues(hwndDlg
, g
);
568 iListIndex
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETCURSEL
, 0, 0);
569 g
->CurrentElement
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETITEMDATA
, (WPARAM
)iListIndex
, 0);
570 UpdateControls(hwndDlg
, g
);
574 case IDC_ADVAPPEARANCE_SIZE_E
:
575 if (g
&& HIWORD(wParam
) == EN_CHANGE
)
577 INT i
= (INT
)LOWORD(SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_UD
, UDM_GETPOS
,0,0L));
579 switch (g
->CurrentElement
)
581 case IDX_INACTIVE_CAPTION
:
582 case IDX_ACTIVE_CAPTION
:
583 case IDX_CAPTION_BUTTON
:
584 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_SETCYCAPTION
, 0, i
);
588 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_SETCYMENU
, 0, i
);
592 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_SETCXSCROLLBAR
, 0, i
);
595 case IDX_INACTIVE_BORDER
:
596 case IDX_ACTIVE_BORDER
:
597 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_SETCYSIZEFRAME
, 0, i
);
603 case IDC_ADVAPPEARANCE_FONT_C
:
604 if (g
&& HIWORD(wParam
) == CBN_SELCHANGE
)
606 switch (g
->CurrentElement
)
608 case IDX_INACTIVE_CAPTION
:
609 case IDX_ACTIVE_CAPTION
:
610 GetSelectedComboText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
,
611 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfFaceName
);
612 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
616 GetSelectedComboText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
,
617 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfFaceName
);
618 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
622 GetSelectedComboText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
,
623 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfFaceName
);
624 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
630 case IDC_ADVAPPEARANCE_FONTSIZE_E
:
631 if (g
&& HIWORD(wParam
) == CBN_SELCHANGE
)
633 HDC hdcDlg
= GetDC(hwndDlg
);
636 switch (g
->CurrentElement
)
638 case IDX_INACTIVE_CAPTION
:
639 case IDX_ACTIVE_CAPTION
:
640 i
= GetSelectedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
641 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
642 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
643 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
647 i
= GetSelectedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
648 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
649 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
650 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
654 i
= GetSelectedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
655 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
656 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
657 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
661 ReleaseDC(hwndDlg
, hdcDlg
);
663 else if (g
&& HIWORD(wParam
) == CBN_EDITCHANGE
)
665 HDC hdcDlg
= GetDC(hwndDlg
);
668 switch (g
->CurrentElement
)
670 case IDX_INACTIVE_CAPTION
:
671 case IDX_ACTIVE_CAPTION
:
672 i
= GetEditedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
673 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
674 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
675 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
679 i
= GetEditedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
680 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
681 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
682 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
686 i
= GetEditedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
687 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
688 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
689 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
693 ReleaseDC(hwndDlg
, hdcDlg
);
697 case IDC_ADVAPPEARANCE_FONTBOLD
:
698 if (g
&& HIWORD(wParam
) == BN_CLICKED
)
702 switch (g
->CurrentElement
)
704 case IDX_INACTIVE_CAPTION
:
705 case IDX_ACTIVE_CAPTION
:
706 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_GETCHECK
, 0, 0);
707 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfWeight
=
708 (i
== BST_CHECKED
) ? FW_BOLD
: FW_NORMAL
;
709 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
713 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_GETCHECK
, 0, 0);
715 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfWeight
=
716 (i
== BST_CHECKED
) ? FW_BOLD
: FW_NORMAL
;
717 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
721 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_GETCHECK
, 0, 0);
722 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfWeight
=
723 (i
== BST_CHECKED
) ? FW_BOLD
: FW_NORMAL
;
724 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
730 case IDC_ADVAPPEARANCE_FONTITALIC
:
731 if (g
&& HIWORD(wParam
) == BN_CLICKED
)
735 switch (g
->CurrentElement
)
737 case IDX_INACTIVE_CAPTION
:
738 case IDX_ACTIVE_CAPTION
:
739 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_GETCHECK
, 0, 0);
740 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfItalic
=
741 (i
== BST_CHECKED
) ? TRUE
: FALSE
;
742 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
746 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_GETCHECK
, 0, 0);
747 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfItalic
=
748 (i
== BST_CHECKED
) ? TRUE
: FALSE
;
749 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
753 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_GETCHECK
, 0, 0);
754 g
->ThemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfItalic
=
755 (i
== BST_CHECKED
) ? TRUE
: FALSE
;
756 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->ThemeAdv
);
762 case IDC_ADVAPPEARANCE_COLOR1_B
:
763 GetColor(hwndDlg
, g
, 0);
766 case IDC_ADVAPPEARANCE_COLOR2_B
:
767 GetColor(hwndDlg
, g
, 1);
770 case IDC_ADVAPPEARANCE_FONTCOLOR_B
:
771 GetColor(hwndDlg
, g
, 2);