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 /******************************************************************************/
26 /* This const assigns the color and metric numbers to the elements from the elements list */
28 /* Size 1 (width) Size 2 (height) Color 1 Color 2 Font Fontcolor */
29 const ASSIGNMENT g_Assignment
[NUM_ELEMENTS
] =
30 { {-1, -1, COLOR_DESKTOP
, -1, -1, -1}, /* -Desktop */
31 {SIZE_CAPTION_Y
, -1, COLOR_INACTIVECAPTION
, COLOR_GRADIENTINACTIVECAPTION
, FONT_CAPTION
, -1}, /* inactive window caption */
32 {SIZE_BORDER_X
, SIZE_BORDER_Y
, COLOR_INACTIVEBORDER
, -1, -1, -1}, /* inactive window border */
33 {SIZE_CAPTION_Y
, -1, COLOR_ACTIVECAPTION
, COLOR_GRADIENTACTIVECAPTION
, FONT_CAPTION
, COLOR_CAPTIONTEXT
}, /* -active window caption */
34 {SIZE_BORDER_X
, SIZE_BORDER_Y
, COLOR_ACTIVEBORDER
, -1, -1, -1}, /* active window border */
35 {SIZE_MENU_SIZE_X
,SIZE_MENU_Y
, COLOR_MENU
, -1, FONT_MENU
, COLOR_MENUTEXT
}, /* menu */
36 {SIZE_MENU_SIZE_X
,SIZE_MENU_Y
, COLOR_HIGHLIGHT
, -1, FONT_HILIGHT
, COLOR_HIGHLIGHTTEXT
},/* marked element */
37 {-1, -1, COLOR_WINDOW
, -1 /*COLOR_WINDOWFRAME*/, -1, COLOR_WINDOWTEXT
}, /* window */
38 {SIZE_SCROLL_X
, SIZE_SCROLL_Y
, COLOR_SCROLLBAR
, -1, -1, -1}, /* scroll bar */
39 {-1, -1, COLOR_3DFACE
, -1, -1, COLOR_BTNTEXT
}, /* 3d objects */
40 {SIZE_SMCAPTION_Y
,-1, -1, -1, FONT_SMCAPTION
, -1}, /* palette window caption */
41 {-1, -1, -1, -1, -1, -1}, /* symbol caption FIXME: Access? */
42 {SIZE_CAPTION_Y
, -1, -1, -1, -1, -1}, /* caption bar */
43 {-1, -1, -1, -1, -1, COLOR_GRAYTEXT
}, /* inactive menu item FIXME: Access? */
44 {-1, -1, -1, -1, FONT_DIALOG
, COLOR_WINDOWTEXT
}, /* dialog */
45 {-1, -1, -1, -1, -1, -1}, /* scrollbar controls FIXME: Access? */
46 {-1, -1, COLOR_APPWORKSPACE
, -1, -1, -1}, /* application background */
47 {-1, -1, -1, -1, -1, -1}, /* small caption bar FIXME: Access? */
48 {SIZE_ICON_SPC_X
, -1, -1, -1, -1, -1}, /* symbol distance horiz. */
49 {SIZE_ICON_SPC_Y
, -1, -1, -1, -1, -1}, /* symbol distance vert. */
50 {-1, -1, COLOR_INFOBK
, -1, FONT_INFO
, COLOR_INFOTEXT
}, /* quickinfo */
51 {SIZE_ICON_X
, SIZE_ICON_Y
, -1, -1, FONT_ICON
, -1}}; /* symbol */
53 /******************************************************************************/
55 /* Draw the current color on the color picker buttons */
57 UpdateButtonColor(HWND hwndDlg
, GLOBALS
* g
, INT ID
, INT nButton
, INT nColor
)
59 HDC hdcColorButton
, hdcCompat
;
67 /* Create a DC to draw on */
68 hwndColorButton
= GetDlgItem(hwndDlg
, ID
);
69 hdcColorButton
= GetDC(hwndColorButton
);
70 hdcCompat
= CreateCompatibleDC(hdcColorButton
);
71 ReleaseDC(hwndColorButton
, hdcColorButton
);
73 /* Select the button image to it */
74 hgdiTmp
= SelectObject(hdcCompat
, g
->hbmpColor
[nButton
]);
76 /* Create a brush and draw the rectangle */
81 hbrush
= CreateSolidBrush(g
->SchemeAdv
.crColor
[nColor
]);
82 FillRect(hdcCompat
, &rect
, hbrush
);
85 /* hdcCompat is not needed anymore */
86 SelectObject(hdcCompat
,hgdiTmp
);
89 SendDlgItemMessage(hwndDlg
, ID
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)g
->hbmpColor
[nButton
]);
90 EnableWindow(GetDlgItem(hwndDlg
, ID
), TRUE
);
94 SendDlgItemMessage(hwndDlg
, ID
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)NULL
);
95 EnableWindow(GetDlgItem(hwndDlg
, ID
), FALSE
);
100 /* Create the basic bitmaps for the color picker buttons */
102 InitColorButtons(HWND hwndDlg
, GLOBALS
* g
)
105 HDC hdcColorButton
, hdcCompat
;
109 HWND hwndColorButton
;
111 COLOR_SCHEME
*scheme
= &g
->SchemeAdv
;
113 const POINT Points
[3] = {{29,6},{33,6},{31,8}};
115 hwndColorButton
= GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_COLOR1_B
);
116 hdcColorButton
= GetDC(hwndColorButton
);
117 for (i
= 0; i
<= 2; i
++)
119 /* Create a DC to draw on */
120 hdcCompat
= CreateCompatibleDC(hdcColorButton
);
122 /* Create the button image */
123 g
->hbmpColor
[i
] = CreateCompatibleBitmap(hdcColorButton
, 36, 15);
125 /* Select the button image to the DC */
126 hgdiTemp
= SelectObject(hdcCompat
, g
->hbmpColor
[i
]);
128 /* Draw the buttons background color */
133 hbrush
= CreateSolidBrush(scheme
->crColor
[COLOR_BTNFACE
]);
134 FillRect(hdcCompat
, &rect
, hbrush
);
135 DeleteObject(hbrush
);
137 /* Draw the rectangle */
142 hbrush
= CreateSolidBrush(scheme
->crColor
[COLOR_BTNTEXT
]);
143 FillRect(hdcCompat
, &rect
, hbrush
);
144 DeleteObject(hbrush
);
146 /* Draw left side of line */
147 hPen
= CreatePen(PS_SOLID
, 1, scheme
->crColor
[COLOR_BTNSHADOW
]);
148 SelectObject(hdcCompat
, hPen
);
149 MoveToEx(hdcCompat
, 26, 1, NULL
);
150 LineTo(hdcCompat
, 26, 14);
151 SelectObject(hdcCompat
, GetStockObject(BLACK_PEN
));
154 /* Draw right side of line */
155 hPen
= CreatePen(PS_SOLID
, 1, scheme
->crColor
[COLOR_BTNHIGHLIGHT
]);
156 SelectObject(hdcCompat
,hPen
);
157 MoveToEx(hdcCompat
, 27, 1, NULL
);
158 LineTo(hdcCompat
, 27, 14);
159 SelectObject(hdcCompat
, GetStockObject(BLACK_PEN
));
163 hPen
= CreatePen(PS_SOLID
, 1, scheme
->crColor
[COLOR_BTNTEXT
]);
164 hbrush
= CreateSolidBrush(scheme
->crColor
[COLOR_BTNTEXT
]);
165 SelectObject(hdcCompat
, hPen
);
166 SelectObject(hdcCompat
, hbrush
);
167 SetPolyFillMode(hdcCompat
, WINDING
);
169 /* FIXME: HACK, see Points definition */
170 Polygon(hdcCompat
, Points
, 3);
173 SelectObject(hdcCompat
,hgdiTemp
);
176 DeleteObject(hbrush
);
179 ReleaseDC(hwndColorButton
, hdcColorButton
);
181 /* Set the images of the buttons */
182 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_COLOR1_B
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)g
->hbmpColor
[0]);
183 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_COLOR2_B
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)g
->hbmpColor
[1]);
184 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTCOLOR_B
, BM_SETIMAGE
, (WPARAM
)IMAGE_BITMAP
, (LPARAM
)g
->hbmpColor
[2]);
188 /* This is the callback function to add the installed fonts to the font combo */
190 EnumFontFamExProc(ENUMLOGFONTEX
*lpelfe
, NEWTEXTMETRICEX
*lpntme
, DWORD dwFontType
, LPARAM lParam
)
192 /* Don't enumerate more than 100 fonts */
193 if (SendMessage((HWND
)lParam
, CB_GETCOUNT
, 0, 0) >= 100)
196 /* Only add the string once */
197 if (SendMessage((HWND
)lParam
, CB_FINDSTRINGEXACT
, -1, (WPARAM
)&(lpelfe
->elfLogFont
.lfFaceName
)) != CB_ERR
)
200 SendMessage((HWND
)lParam
, CB_ADDSTRING
, 0, (WPARAM
)&(lpelfe
->elfLogFont
.lfFaceName
));
206 /* Update all the controls with the current values for the selected screen element */
208 UpdateControls(HWND hwndDlg
, GLOBALS
*g
)
213 iElement
= g
->CurrentElement
;
215 /* First enable / disable the controls */
216 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_E
), (g_Assignment
[iElement
].Size
!= -1));
217 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_UD
), (g_Assignment
[iElement
].Size
!= -1));
218 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_T
), (g_Assignment
[iElement
].Size
!= -1));
219 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_COLOR1_T
), (g_Assignment
[iElement
].Color1
!= -1));
220 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_COLOR2_T
), (g_Assignment
[iElement
].Color2
!= -1));
221 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONT_T
), (g_Assignment
[iElement
].Font
!= -1));
222 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
), (g_Assignment
[iElement
].Font
!= -1));
223 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_T
), (g_Assignment
[iElement
].Font
!= -1));
224 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
), (g_Assignment
[iElement
].Font
!= -1));
225 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTCOLOR_T
), (g_Assignment
[iElement
].FontColor
!= -1));
226 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
), (g_Assignment
[iElement
].Font
!= -1));
227 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
), (g_Assignment
[iElement
].Font
!= -1));
229 /* Update the colors of the color buttons */
230 UpdateButtonColor(hwndDlg
, g
, IDC_ADVAPPEARANCE_COLOR1_B
, 0, g_Assignment
[iElement
].Color1
);
231 UpdateButtonColor(hwndDlg
, g
, IDC_ADVAPPEARANCE_COLOR2_B
, 1, g_Assignment
[iElement
].Color2
);
232 UpdateButtonColor(hwndDlg
, g
, IDC_ADVAPPEARANCE_FONTCOLOR_B
, 2, g_Assignment
[iElement
].FontColor
);
234 if (g_Assignment
[iElement
].Size
!= -1)
235 SetDlgItemInt(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_E
, g
->SchemeAdv
.Size
[g_Assignment
[iElement
].Size
], FALSE
);
237 SetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_E
, TEXT(""));
239 hdcDlg
= GetDC(hwndDlg
);
240 if (g_Assignment
[iElement
].Font
!= -1)
242 LOGFONT lfFont
= g
->SchemeAdv
.lfFont
[g_Assignment
[iElement
].Font
];
244 SetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
, lfFont
.lfFaceName
);
245 SetDlgItemInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
, -MulDiv(g
->SchemeAdv
.lfFont
[g_Assignment
[iElement
].Font
].lfHeight
, 72, GetDeviceCaps(hdcDlg
, LOGPIXELSY
)),FALSE
);
246 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
, CB_FINDSTRINGEXACT
, -1, (WPARAM
)lfFont
.lfFaceName
);
247 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_SETCHECK
, g
->SchemeAdv
.lfFont
[g_Assignment
[iElement
].Font
].lfWeight
== FW_BOLD
?1:0, 0);
248 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_SETCHECK
, g
->SchemeAdv
.lfFont
[g_Assignment
[iElement
].Font
].lfItalic
, 0);
252 SetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
, NULL
);
253 SetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
, NULL
);
254 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_SETCHECK
, 0, 0);
255 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_SETCHECK
, 0, 0);
258 ReleaseDC(hwndDlg
, hdcDlg
);
263 SaveCurrentValues(HWND hwndDlg
, GLOBALS
*g
)
266 HDC hdcDlg
= GetDC(hwndDlg
);
268 if (g_Assignment
[g
->CurrentElement
].Size
!= -1)
270 g
->SchemeAdv
.Size
[g_Assignment
[g
->CurrentElement
].Size
] = GetDlgItemInt(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_E
, &bTranslated
, FALSE
);
273 if (g_Assignment
[g
->CurrentElement
].Font
!= -1)
275 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
= -MulDiv(GetDlgItemInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
, &bTranslated
, FALSE
), GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
276 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfWeight
= (SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_GETCHECK
, 0, 0) == 1) ? FW_BOLD
: FW_NORMAL
;
277 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfItalic
= (BYTE
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_GETCHECK
, 0, 0);
278 GetDlgItemText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
, g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfFaceName
, LF_FACESIZE
* sizeof(TCHAR
));
281 ReleaseDC(hwndDlg
, hdcDlg
);
285 /* Select a color using a color picker */
287 GetColor(HWND hwndDlg
, GLOBALS
* g
, INT nButton
)
290 COLORREF crCustom
[16] = { 0 };
295 /* Get the color index from the element index and button number */
299 ColorIndex
= g_Assignment
[g
->CurrentElement
].Color1
;
300 ID
= IDC_ADVAPPEARANCE_COLOR1_B
;
304 ColorIndex
= g_Assignment
[g
->CurrentElement
].Color2
;
305 ID
= IDC_ADVAPPEARANCE_COLOR2_B
;
309 ColorIndex
= g_Assignment
[g
->CurrentElement
].FontColor
;
310 ID
= IDC_ADVAPPEARANCE_FONTCOLOR_B
;
314 crColor
= g
->SchemeAdv
.crColor
[ColorIndex
];
316 /* Prepare cc structure */
317 cc
.lStructSize
= sizeof(CHOOSECOLOR
);
318 cc
.hwndOwner
= hwndDlg
;
320 cc
.rgbResult
= crColor
;
321 cc
.lpCustColors
= crCustom
;
322 cc
.Flags
= CC_ANYCOLOR
| CC_FULLOPEN
| CC_RGBINIT
;
325 cc
.lpTemplateName
= NULL
;
327 /* Create the colorpicker */
328 if (ChooseColor(&cc
))
330 g
->SchemeAdv
.crColor
[ColorIndex
] = cc
.rgbResult
;
331 if (crColor
!= cc
.rgbResult
)
333 UpdateButtonColor(hwndDlg
, g
, ID
, nButton
, ColorIndex
);
334 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
343 /* Initialize the advanced appearance dialog */
345 AdvAppearanceDlg_Init(HWND hwndDlg
, GLOBALS
*g
)
347 INT i
, iElement
, iListIndex
, iDeskIndex
= 0;
350 LOGFONT lfButtonFont
;
355 /* Copy the current theme values */
356 g
->SchemeAdv
= g
->Scheme
;
358 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
361 /* Add the elements to the combo */
362 for (iElement
= 0; iElement
< NUM_ELEMENTS
; iElement
++)
364 LoadString(hApplet
, IDS_ELEMENT_1
+ iElement
, (LPTSTR
)&tstrText
, 79);
365 iListIndex
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_ADDSTRING
, 0, (LPARAM
)&tstrText
);
366 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_SETITEMDATA
, (WPARAM
)iListIndex
, (LPARAM
)iElement
);
369 /* Get the list index of the desktop element */
370 for (iListIndex
= 0; iListIndex
< NUM_ELEMENTS
; iListIndex
++)
372 iElement
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETITEMDATA
, (WPARAM
)iListIndex
, 0);
375 iDeskIndex
= iListIndex
;
380 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_SETCURSEL
, iDeskIndex
, 0);
382 /* Create font for bold button */
383 lfButtonFont
= g
->Scheme
.lfFont
[FONT_DIALOG
];
384 lfButtonFont
.lfWeight
= FW_BOLD
;
385 lfButtonFont
.lfItalic
= FALSE
;
386 hMyFont
= CreateFontIndirect(&lfButtonFont
);
390 DeleteObject(g
->hBoldFont
);
392 g
->hBoldFont
= hMyFont
;
395 /* Create font for italic button */
396 lfButtonFont
.lfWeight
= FW_REGULAR
;
397 lfButtonFont
.lfItalic
= TRUE
;
398 hMyFont
= CreateFontIndirect(&lfButtonFont
);
402 DeleteObject(g
->hItalicFont
);
404 g
->hItalicFont
= hMyFont
;
407 /* Set the fonts for the font style buttons */
408 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, WM_SETFONT
, (WPARAM
)g
->hBoldFont
, (LPARAM
)TRUE
);
409 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, WM_SETFONT
, (WPARAM
)g
->hItalicFont
, (LPARAM
)TRUE
);
411 /* Draw Bitmaps for the colorbuttons */
412 InitColorButtons(hwndDlg
, g
);
414 /* Make the UpDown control count correctly */
415 SendMessage(GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_UD
), UDM_SETRANGE
, 0L, MAKELONG (200, 1));
417 /* Fill font selection combo */
418 lfFont
.lfCharSet
= DEFAULT_CHARSET
;
419 lfFont
.lfFaceName
[0] = (TCHAR
)0;
420 lfFont
.lfPitchAndFamily
= 0;
421 hScreenDC
= GetDC(0);
422 EnumFontFamiliesEx(hScreenDC
, &lfFont
, (FONTENUMPROC
)EnumFontFamExProc
, (LPARAM
)GetDlgItem(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
), 0);
423 ReleaseDC(0, hScreenDC
);
425 /* Fill font size combo */
426 for (i
= 6; i
<= 24; i
++)
428 wsprintf(Size
, TEXT("%d"), i
);
429 SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
, CB_ADDSTRING
, 0, (LPARAM
)&Size
);
432 /* Update the controls */
433 iListIndex
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETCURSEL
, 0, 0);
434 g
->CurrentElement
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETITEMDATA
, (WPARAM
)iListIndex
, 0);
435 UpdateControls(hwndDlg
, g
);
440 AdvAppearanceDlg_CleanUp(HWND hwndDlg
, GLOBALS
* g
)
442 DeleteObject(g
->hBoldFont
);
443 DeleteObject(g
->hItalicFont
);
448 SelectComboByElement(HWND hwnd
, INT id
, LPARAM lParam
)
453 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETCOUNT
, 0, 0);
454 if (nCount
== CB_ERR
)
457 for (i
= 0; i
< nCount
; i
++)
459 if (SendDlgItemMessage(hwnd
, id
, CB_GETITEMDATA
, (WPARAM
)i
, 0) == lParam
)
461 SendDlgItemMessage(hwnd
, id
, CB_SETCURSEL
, (WPARAM
)i
, 0);
469 GetSelectedComboText(HWND hwnd
, INT id
, LPWSTR lpStr
)
473 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETCURSEL
, 0, 0);
474 if (nCount
== CB_ERR
)
480 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETLBTEXT
, (WPARAM
)nCount
, (LPARAM
)lpStr
);
481 if (nCount
== CB_ERR
)
489 GetSelectedComboInt(HWND hwnd
, INT id
)
494 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETCURSEL
, 0, 0);
495 if (nCount
== CB_ERR
)
498 nCount
= SendDlgItemMessage(hwnd
, id
, CB_GETLBTEXT
, (WPARAM
)nCount
, (LPARAM
)szBuffer
);
499 if (nCount
== CB_ERR
)
502 return _ttoi(szBuffer
);
507 GetEditedComboInt(HWND hwnd
, INT id
)
512 nCount
= GetDlgItemInt(hwnd
, id
, &bTranslated
, FALSE
);
513 if (bTranslated
== FALSE
)
522 AdvAppearanceDlgProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
527 g
= (GLOBALS
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
532 g
= (GLOBALS
*)lParam
;
533 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)g
);
534 AdvAppearanceDlg_Init(hwndDlg
, g
);
538 AdvAppearanceDlg_CleanUp(hwndDlg
, g
);
542 switch(LOWORD(wParam
))
545 SaveCurrentValues(hwndDlg
, g
);
546 EndDialog(hwndDlg
, IDOK
);
550 g
->SchemeAdv
= g
->Scheme
;
551 EndDialog(hwndDlg
, IDCANCEL
);
554 case IDC_APPEARANCE_PREVIEW
:
555 SaveCurrentValues(hwndDlg
, g
);
556 SelectComboByElement(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, lParam
);
557 g
->CurrentElement
= (INT
)lParam
;
558 UpdateControls(hwndDlg
, g
);
561 case IDC_ADVAPPEARANCE_ELEMENT
:
562 if (HIWORD(wParam
) == CBN_SELCHANGE
)
564 SaveCurrentValues(hwndDlg
, g
);
565 iListIndex
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETCURSEL
, 0, 0);
566 g
->CurrentElement
= SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_ELEMENT
, CB_GETITEMDATA
, (WPARAM
)iListIndex
, 0);
567 UpdateControls(hwndDlg
, g
);
571 case IDC_ADVAPPEARANCE_SIZE_E
:
572 if (g
&& HIWORD(wParam
) == EN_CHANGE
)
574 INT i
= (INT
)LOWORD(SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_SIZE_UD
, UDM_GETPOS
,0,0L));
576 switch (g
->CurrentElement
)
578 case IDX_INACTIVE_CAPTION
:
579 case IDX_ACTIVE_CAPTION
:
580 case IDX_CAPTION_BUTTON
:
581 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_SETCYCAPTION
, 0, i
);
585 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_SETCYMENU
, 0, i
);
589 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_SETCXSCROLLBAR
, 0, i
);
592 case IDX_INACTIVE_BORDER
:
593 case IDX_ACTIVE_BORDER
:
594 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_SETCYSIZEFRAME
, 0, i
);
600 case IDC_ADVAPPEARANCE_FONT_C
:
601 if (g
&& HIWORD(wParam
) == CBN_SELCHANGE
)
603 switch (g
->CurrentElement
)
605 case IDX_INACTIVE_CAPTION
:
606 case IDX_ACTIVE_CAPTION
:
607 GetSelectedComboText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
,
608 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfFaceName
);
609 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
613 GetSelectedComboText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
,
614 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfFaceName
);
615 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
619 GetSelectedComboText(hwndDlg
, IDC_ADVAPPEARANCE_FONT_C
,
620 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfFaceName
);
621 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
627 case IDC_ADVAPPEARANCE_FONTSIZE_E
:
628 if (g
&& HIWORD(wParam
) == CBN_SELCHANGE
)
630 HDC hdcDlg
= GetDC(hwndDlg
);
633 switch (g
->CurrentElement
)
635 case IDX_INACTIVE_CAPTION
:
636 case IDX_ACTIVE_CAPTION
:
637 i
= GetSelectedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
638 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
639 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
640 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
644 i
= GetSelectedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
645 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
646 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
647 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
651 i
= GetSelectedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
652 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
653 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
654 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
658 ReleaseDC(hwndDlg
, hdcDlg
);
660 else if (g
&& HIWORD(wParam
) == CBN_EDITCHANGE
)
662 HDC hdcDlg
= GetDC(hwndDlg
);
665 switch (g
->CurrentElement
)
667 case IDX_INACTIVE_CAPTION
:
668 case IDX_ACTIVE_CAPTION
:
669 i
= GetEditedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
670 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
671 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
672 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
676 i
= GetEditedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
677 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
678 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
679 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
683 i
= GetEditedComboInt(hwndDlg
, IDC_ADVAPPEARANCE_FONTSIZE_E
);
684 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfHeight
=
685 -MulDiv(i
, GetDeviceCaps(hdcDlg
, LOGPIXELSY
), 72);
686 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
690 ReleaseDC(hwndDlg
, hdcDlg
);
694 case IDC_ADVAPPEARANCE_FONTBOLD
:
695 if (g
&& HIWORD(wParam
) == BN_CLICKED
)
699 switch (g
->CurrentElement
)
701 case IDX_INACTIVE_CAPTION
:
702 case IDX_ACTIVE_CAPTION
:
703 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_GETCHECK
, 0, 0);
704 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfWeight
=
705 (i
== BST_CHECKED
) ? FW_BOLD
: FW_NORMAL
;
706 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
710 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_GETCHECK
, 0, 0);
712 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfWeight
=
713 (i
== BST_CHECKED
) ? FW_BOLD
: FW_NORMAL
;
714 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
718 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTBOLD
, BM_GETCHECK
, 0, 0);
719 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfWeight
=
720 (i
== BST_CHECKED
) ? FW_BOLD
: FW_NORMAL
;
721 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
727 case IDC_ADVAPPEARANCE_FONTITALIC
:
728 if (g
&& HIWORD(wParam
) == BN_CLICKED
)
732 switch (g
->CurrentElement
)
734 case IDX_INACTIVE_CAPTION
:
735 case IDX_ACTIVE_CAPTION
:
736 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_GETCHECK
, 0, 0);
737 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfItalic
=
738 (i
== BST_CHECKED
) ? TRUE
: FALSE
;
739 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
743 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_GETCHECK
, 0, 0);
744 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfItalic
=
745 (i
== BST_CHECKED
) ? TRUE
: FALSE
;
746 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
750 i
= (INT
)SendDlgItemMessage(hwndDlg
, IDC_ADVAPPEARANCE_FONTITALIC
, BM_GETCHECK
, 0, 0);
751 g
->SchemeAdv
.lfFont
[g_Assignment
[g
->CurrentElement
].Font
].lfItalic
=
752 (i
== BST_CHECKED
) ? TRUE
: FALSE
;
753 SendDlgItemMessage(hwndDlg
, IDC_APPEARANCE_PREVIEW
, PVM_UPDATETHEME
, 0, (LPARAM
)&g
->SchemeAdv
);
759 case IDC_ADVAPPEARANCE_COLOR1_B
:
760 GetColor(hwndDlg
, g
, 0);
763 case IDC_ADVAPPEARANCE_COLOR2_B
:
764 GetColor(hwndDlg
, g
, 1);
767 case IDC_ADVAPPEARANCE_FONTCOLOR_B
:
768 GetColor(hwndDlg
, g
, 2);