Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenadvappdlg.c
Go to the documentation of this file.
00001 /* $Id: advappdlg.c 24836 2007-02-12 03:12:56Z tkreuzer $ 00002 * 00003 * COPYRIGHT: See COPYING in the top level directory 00004 * PROJECT: ReactOS Display Control Panel 00005 * FILE: dll/cpl/desk/advappdlg.c 00006 * PURPOSE: Advanced appearance dialog 00007 * 00008 * PROGRAMMER: Timo Kreuzer (timo[dot]kreuzer[at]web[dot]de) 00009 * 00010 */ 00011 00012 #include "desk.h" 00013 00014 /******************************************************************************/ 00015 00016 typedef struct 00017 { 00018 int Size; 00019 int Size2; 00020 int Color1; 00021 int Color2; 00022 int Font; 00023 int FontColor; 00024 } ASSIGNMENT; 00025 00026 /* This const assigns the color and metric numbers to the elements from the elements list */ 00027 00028 /* Size 1 (width) Size 2 (height) Color 1 Color 2 Font Fontcolor */ 00029 const ASSIGNMENT g_Assignment[NUM_ELEMENTS] = 00030 { {-1, -1, COLOR_DESKTOP, -1, -1, -1}, /* -Desktop */ 00031 {SIZE_CAPTION_Y, -1, COLOR_INACTIVECAPTION, COLOR_GRADIENTINACTIVECAPTION, FONT_CAPTION, -1}, /* inactive window caption */ 00032 {SIZE_BORDER_X, SIZE_BORDER_Y, COLOR_INACTIVEBORDER, -1, -1, -1}, /* inactive window border */ 00033 {SIZE_CAPTION_Y, -1, COLOR_ACTIVECAPTION, COLOR_GRADIENTACTIVECAPTION, FONT_CAPTION, COLOR_CAPTIONTEXT}, /* -active window caption */ 00034 {SIZE_BORDER_X, SIZE_BORDER_Y, COLOR_ACTIVEBORDER, -1, -1, -1}, /* active window border */ 00035 {SIZE_MENU_SIZE_X,SIZE_MENU_Y, COLOR_MENU, -1, FONT_MENU, COLOR_MENUTEXT}, /* menu */ 00036 {SIZE_MENU_SIZE_X,SIZE_MENU_Y, COLOR_HIGHLIGHT, -1, FONT_HILIGHT, COLOR_HIGHLIGHTTEXT},/* marked element */ 00037 {-1, -1, COLOR_WINDOW, -1 /*COLOR_WINDOWFRAME*/, -1, COLOR_WINDOWTEXT}, /* window */ 00038 {SIZE_SCROLL_X, SIZE_SCROLL_Y, COLOR_SCROLLBAR, -1, -1, -1}, /* scroll bar */ 00039 {-1, -1, COLOR_3DFACE, -1, -1, COLOR_BTNTEXT}, /* 3d objects */ 00040 {SIZE_SMCAPTION_Y,-1, -1, -1, FONT_SMCAPTION, -1}, /* palette window caption */ 00041 {-1, -1, -1, -1, -1, -1}, /* symbol caption FIXME: Access? */ 00042 {SIZE_CAPTION_Y, -1, -1, -1, -1, -1}, /* caption bar */ 00043 {-1, -1, -1, -1, -1, COLOR_GRAYTEXT}, /* inactive menu item FIXME: Access? */ 00044 {-1, -1, -1, -1, FONT_DIALOG, COLOR_WINDOWTEXT}, /* dialog */ 00045 {-1, -1, -1, -1, -1, -1}, /* scrollbar controls FIXME: Access? */ 00046 {-1, -1, COLOR_APPWORKSPACE, -1, -1, -1}, /* application background */ 00047 {-1, -1, -1, -1, -1, -1}, /* small caption bar FIXME: Access? */ 00048 {SIZE_ICON_SPC_X, -1, -1, -1, -1, -1}, /* symbol distance horiz. */ 00049 {SIZE_ICON_SPC_Y, -1, -1, -1, -1, -1}, /* symbol distance vert. */ 00050 {-1, -1, COLOR_INFOBK, -1, FONT_INFO, COLOR_INFOTEXT}, /* quickinfo */ 00051 {SIZE_ICON_X, SIZE_ICON_Y, -1, -1, FONT_ICON, -1}}; /* symbol */ 00052 00053 /******************************************************************************/ 00054 00055 /* Draw the current color on the color picker buttons */ 00056 static VOID 00057 UpdateButtonColor(HWND hwndDlg, GLOBALS* g, INT ID, INT nButton, INT nColor) 00058 { 00059 HDC hdcColorButton, hdcCompat; 00060 RECT rect; 00061 HBRUSH hbrush; 00062 HWND hwndColorButton; 00063 HGDIOBJ hgdiTmp; 00064 00065 if (nColor != -1) 00066 { 00067 /* Create a DC to draw on */ 00068 hwndColorButton = GetDlgItem(hwndDlg, ID); 00069 hdcColorButton = GetDC(hwndColorButton); 00070 hdcCompat = CreateCompatibleDC(hdcColorButton); 00071 ReleaseDC(hwndColorButton, hdcColorButton); 00072 00073 /* Select the button image to it */ 00074 hgdiTmp = SelectObject(hdcCompat, g->hbmpColor[nButton]); 00075 00076 /* Create a brush and draw the rectangle */ 00077 rect.left = 2; 00078 rect.top = 2; 00079 rect.right = 22; 00080 rect.bottom = 13; 00081 hbrush = CreateSolidBrush(g->SchemeAdv.crColor[nColor]); 00082 FillRect(hdcCompat, &rect, hbrush); 00083 DeleteObject(hbrush); 00084 00085 /* hdcCompat is not needed anymore */ 00086 SelectObject(hdcCompat,hgdiTmp); 00087 DeleteDC(hdcCompat); 00088 00089 SendDlgItemMessage(hwndDlg, ID, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[nButton]); 00090 EnableWindow(GetDlgItem(hwndDlg, ID), TRUE); 00091 } 00092 else 00093 { 00094 SendDlgItemMessage(hwndDlg, ID, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)NULL); 00095 EnableWindow(GetDlgItem(hwndDlg, ID), FALSE); 00096 } 00097 } 00098 00099 00100 /* Create the basic bitmaps for the color picker buttons */ 00101 static VOID 00102 InitColorButtons(HWND hwndDlg, GLOBALS* g) 00103 { 00104 INT i; 00105 HDC hdcColorButton, hdcCompat; 00106 RECT rect; 00107 HBRUSH hbrush; 00108 HPEN hPen; 00109 HWND hwndColorButton; 00110 HGDIOBJ hgdiTemp; 00111 COLOR_SCHEME *scheme = &g->SchemeAdv; 00112 00113 const POINT Points[3] = {{29,6},{33,6},{31,8}}; 00114 00115 hwndColorButton = GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_COLOR1_B); 00116 hdcColorButton = GetDC(hwndColorButton); 00117 for (i = 0; i <= 2; i++) 00118 { 00119 /* Create a DC to draw on */ 00120 hdcCompat = CreateCompatibleDC(hdcColorButton); 00121 00122 /* Create the button image */ 00123 g->hbmpColor[i] = CreateCompatibleBitmap(hdcColorButton, 36, 15); 00124 00125 /* Select the button image to the DC */ 00126 hgdiTemp = SelectObject(hdcCompat, g->hbmpColor[i]); 00127 00128 /* Draw the buttons background color */ 00129 rect.left = 0; 00130 rect.top = 0; 00131 rect.right = 36; 00132 rect.bottom = 15; 00133 hbrush = CreateSolidBrush(scheme->crColor[COLOR_BTNFACE]); 00134 FillRect(hdcCompat, &rect, hbrush); 00135 DeleteObject(hbrush); 00136 00137 /* Draw the rectangle */ 00138 rect.left = 1; 00139 rect.top = 1; 00140 rect.right = 23; 00141 rect.bottom = 14; 00142 hbrush = CreateSolidBrush(scheme->crColor[COLOR_BTNTEXT]); 00143 FillRect(hdcCompat, &rect, hbrush); 00144 DeleteObject(hbrush); 00145 00146 /* Draw left side of line */ 00147 hPen = CreatePen(PS_SOLID, 1, scheme->crColor[COLOR_BTNSHADOW]); 00148 SelectObject(hdcCompat, hPen); 00149 MoveToEx(hdcCompat, 26, 1, NULL); 00150 LineTo(hdcCompat, 26, 14); 00151 SelectObject(hdcCompat, GetStockObject(BLACK_PEN)); 00152 DeleteObject(hPen); 00153 00154 /* Draw right side of line */ 00155 hPen = CreatePen(PS_SOLID, 1, scheme->crColor[COLOR_BTNHIGHLIGHT]); 00156 SelectObject(hdcCompat,hPen); 00157 MoveToEx(hdcCompat, 27, 1, NULL); 00158 LineTo(hdcCompat, 27, 14); 00159 SelectObject(hdcCompat, GetStockObject(BLACK_PEN)); 00160 DeleteObject(hPen); 00161 00162 /* Draw triangle */ 00163 hPen = CreatePen(PS_SOLID, 1, scheme->crColor[COLOR_BTNTEXT]); 00164 hbrush = CreateSolidBrush(scheme->crColor[COLOR_BTNTEXT]); 00165 SelectObject(hdcCompat, hPen); 00166 SelectObject(hdcCompat, hbrush); 00167 SetPolyFillMode(hdcCompat, WINDING); 00168 00169 /* FIXME: HACK, see Points definition */ 00170 Polygon(hdcCompat, Points, 3); 00171 00172 /* Cleanup */ 00173 SelectObject(hdcCompat,hgdiTemp); 00174 DeleteDC(hdcCompat); 00175 DeleteObject(hPen); 00176 DeleteObject(hbrush); 00177 } 00178 00179 ReleaseDC(hwndColorButton, hdcColorButton); 00180 00181 /* Set the images of the buttons */ 00182 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_COLOR1_B, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[0]); 00183 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_COLOR2_B, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[1]); 00184 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTCOLOR_B, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)g->hbmpColor[2]); 00185 } 00186 00187 00188 /* This is the callback function to add the installed fonts to the font combo */ 00189 static int CALLBACK 00190 EnumFontFamExProc(ENUMLOGFONTEX *lpelfe, NEWTEXTMETRICEX *lpntme, DWORD dwFontType, LPARAM lParam) 00191 { 00192 /* Don't enumerate more than 100 fonts */ 00193 if (SendMessage((HWND)lParam, CB_GETCOUNT, 0, 0) >= 100) 00194 return 0; 00195 00196 /* Only add the string once */ 00197 if (SendMessage((HWND)lParam, CB_FINDSTRINGEXACT, -1, (WPARAM)&(lpelfe->elfLogFont.lfFaceName)) != CB_ERR) 00198 return 2; 00199 00200 SendMessage((HWND)lParam, CB_ADDSTRING, 0, (WPARAM)&(lpelfe->elfLogFont.lfFaceName)); 00201 00202 return 1; 00203 } 00204 00205 00206 /* Update all the controls with the current values for the selected screen element */ 00207 static VOID 00208 UpdateControls(HWND hwndDlg, GLOBALS *g) 00209 { 00210 INT iElement; 00211 HDC hdcDlg; 00212 00213 iElement = g->CurrentElement; 00214 00215 /* First enable / disable the controls */ 00216 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E), (g_Assignment[iElement].Size != -1)); 00217 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD), (g_Assignment[iElement].Size != -1)); 00218 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_T), (g_Assignment[iElement].Size != -1)); 00219 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_COLOR1_T), (g_Assignment[iElement].Color1 != -1)); 00220 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_COLOR2_T), (g_Assignment[iElement].Color2 != -1)); 00221 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_T), (g_Assignment[iElement].Font != -1)); 00222 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_C), (g_Assignment[iElement].Font != -1)); 00223 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_T), (g_Assignment[iElement].Font != -1)); 00224 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E), (g_Assignment[iElement].Font != -1)); 00225 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTCOLOR_T), (g_Assignment[iElement].FontColor != -1)); 00226 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD), (g_Assignment[iElement].Font != -1)); 00227 EnableWindow(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC), (g_Assignment[iElement].Font != -1)); 00228 00229 /* Update the colors of the color buttons */ 00230 UpdateButtonColor(hwndDlg, g, IDC_ADVAPPEARANCE_COLOR1_B, 0, g_Assignment[iElement].Color1); 00231 UpdateButtonColor(hwndDlg, g, IDC_ADVAPPEARANCE_COLOR2_B, 1, g_Assignment[iElement].Color2); 00232 UpdateButtonColor(hwndDlg, g, IDC_ADVAPPEARANCE_FONTCOLOR_B, 2, g_Assignment[iElement].FontColor); 00233 00234 if (g_Assignment[iElement].Size != -1) 00235 SetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E, g->SchemeAdv.Size[g_Assignment[iElement].Size], FALSE); 00236 else 00237 SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E, TEXT("")); 00238 00239 hdcDlg = GetDC(hwndDlg); 00240 if (g_Assignment[iElement].Font != -1) 00241 { 00242 LOGFONT lfFont = g->SchemeAdv.lfFont[g_Assignment[iElement].Font]; 00243 00244 SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, lfFont.lfFaceName); 00245 SetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, -MulDiv(g->SchemeAdv.lfFont[g_Assignment[iElement].Font].lfHeight, 72, GetDeviceCaps(hdcDlg, LOGPIXELSY)),FALSE); 00246 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, CB_FINDSTRINGEXACT, -1, (WPARAM)lfFont.lfFaceName); 00247 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_SETCHECK, g->SchemeAdv.lfFont[g_Assignment[iElement].Font].lfWeight == FW_BOLD?1:0, 0); 00248 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_SETCHECK, g->SchemeAdv.lfFont[g_Assignment[iElement].Font].lfItalic, 0); 00249 } 00250 else 00251 { 00252 SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, NULL); 00253 SetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, NULL); 00254 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_SETCHECK, 0, 0); 00255 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_SETCHECK, 0, 0); 00256 } 00257 00258 ReleaseDC(hwndDlg, hdcDlg); 00259 } 00260 00261 00262 static VOID 00263 SaveCurrentValues(HWND hwndDlg, GLOBALS *g) 00264 { 00265 BOOL bTranslated; 00266 HDC hdcDlg = GetDC(hwndDlg); 00267 00268 if (g_Assignment[g->CurrentElement].Size != -1) 00269 { 00270 g->SchemeAdv.Size[g_Assignment[g->CurrentElement].Size] = GetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_SIZE_E, &bTranslated, FALSE); 00271 } 00272 00273 if (g_Assignment[g->CurrentElement].Font != -1) 00274 { 00275 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight = -MulDiv(GetDlgItemInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, &bTranslated, FALSE), GetDeviceCaps(hdcDlg, LOGPIXELSY), 72); 00276 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight = (SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0) == 1) ? FW_BOLD : FW_NORMAL; 00277 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic = (BYTE)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0); 00278 GetDlgItemText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName, LF_FACESIZE * sizeof(TCHAR)); 00279 } 00280 00281 ReleaseDC(hwndDlg, hdcDlg); 00282 } 00283 00284 00285 /* Select a color using a color picker */ 00286 static BOOL 00287 GetColor(HWND hwndDlg, GLOBALS* g, INT nButton) 00288 { 00289 CHOOSECOLOR cc; 00290 COLORREF crCustom[16] = { 0 }; 00291 COLORREF crColor; 00292 INT ID = 0; 00293 INT ColorIndex = 0; 00294 00295 /* Get the color index from the element index and button number */ 00296 switch (nButton) 00297 { 00298 case 0: 00299 ColorIndex = g_Assignment[g->CurrentElement].Color1; 00300 ID = IDC_ADVAPPEARANCE_COLOR1_B; 00301 break; 00302 00303 case 1: 00304 ColorIndex = g_Assignment[g->CurrentElement].Color2; 00305 ID = IDC_ADVAPPEARANCE_COLOR2_B; 00306 break; 00307 00308 case 2: 00309 ColorIndex = g_Assignment[g->CurrentElement].FontColor; 00310 ID = IDC_ADVAPPEARANCE_FONTCOLOR_B; 00311 break; 00312 } 00313 00314 crColor = g->SchemeAdv.crColor[ColorIndex]; 00315 00316 /* Prepare cc structure */ 00317 cc.lStructSize = sizeof(CHOOSECOLOR); 00318 cc.hwndOwner = hwndDlg; 00319 cc.hInstance = NULL; 00320 cc.rgbResult = crColor; 00321 cc.lpCustColors = crCustom; 00322 cc.Flags = CC_ANYCOLOR | CC_FULLOPEN | CC_RGBINIT; 00323 cc.lCustData = 0; 00324 cc.lpfnHook = NULL; 00325 cc.lpTemplateName = NULL; 00326 00327 /* Create the colorpicker */ 00328 if (ChooseColor(&cc)) 00329 { 00330 g->SchemeAdv.crColor[ColorIndex] = cc.rgbResult; 00331 if (crColor != cc.rgbResult) 00332 { 00333 UpdateButtonColor(hwndDlg, g, ID, nButton, ColorIndex); 00334 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00335 return TRUE; 00336 } 00337 } 00338 00339 return FALSE; 00340 } 00341 00342 00343 /* Initialize the advanced appearance dialog */ 00344 static VOID 00345 AdvAppearanceDlg_Init(HWND hwndDlg, GLOBALS *g) 00346 { 00347 INT i, iElement, iListIndex, iDeskIndex = 0; 00348 TCHAR tstrText[80]; 00349 LOGFONT lfFont; 00350 LOGFONT lfButtonFont; 00351 HFONT hMyFont; 00352 HDC hScreenDC; 00353 TCHAR Size[4]; 00354 00355 /* Copy the current theme values */ 00356 g->SchemeAdv = g->Scheme; 00357 00358 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00359 00360 00361 /* Add the elements to the combo */ 00362 for (iElement = 0; iElement < NUM_ELEMENTS; iElement++) 00363 { 00364 LoadString(hApplet, IDS_ELEMENT_1 + iElement, (LPTSTR)&tstrText, 79); 00365 iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_ADDSTRING, 0, (LPARAM)&tstrText); 00366 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_SETITEMDATA, (WPARAM)iListIndex, (LPARAM)iElement); 00367 } 00368 00369 /* Get the list index of the desktop element */ 00370 for (iListIndex = 0; iListIndex < NUM_ELEMENTS; iListIndex++) 00371 { 00372 iElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0); 00373 if (iElement == 0) 00374 { 00375 iDeskIndex = iListIndex; 00376 break; 00377 } 00378 } 00379 00380 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_SETCURSEL, iDeskIndex, 0); 00381 00382 /* Create font for bold button */ 00383 lfButtonFont = g->Scheme.lfFont[FONT_DIALOG]; 00384 lfButtonFont.lfWeight = FW_BOLD; 00385 lfButtonFont.lfItalic = FALSE; 00386 hMyFont = CreateFontIndirect(&lfButtonFont); 00387 if (hMyFont) 00388 { 00389 if (g->hBoldFont) 00390 DeleteObject(g->hBoldFont); 00391 00392 g->hBoldFont = hMyFont; 00393 } 00394 00395 /* Create font for italic button */ 00396 lfButtonFont.lfWeight = FW_REGULAR; 00397 lfButtonFont.lfItalic = TRUE; 00398 hMyFont = CreateFontIndirect(&lfButtonFont); 00399 if (hMyFont) 00400 { 00401 if (g->hItalicFont) 00402 DeleteObject(g->hItalicFont); 00403 00404 g->hItalicFont = hMyFont; 00405 } 00406 00407 /* Set the fonts for the font style buttons */ 00408 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, WM_SETFONT, (WPARAM)g->hBoldFont, (LPARAM)TRUE); 00409 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, WM_SETFONT, (WPARAM)g->hItalicFont, (LPARAM)TRUE); 00410 00411 /* Draw Bitmaps for the colorbuttons */ 00412 InitColorButtons(hwndDlg, g); 00413 00414 /* Make the UpDown control count correctly */ 00415 SendMessage(GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD), UDM_SETRANGE, 0L, MAKELONG (200, 1)); 00416 00417 /* Fill font selection combo */ 00418 lfFont.lfCharSet = DEFAULT_CHARSET; 00419 lfFont.lfFaceName[0] = (TCHAR)0; 00420 lfFont.lfPitchAndFamily = 0; 00421 hScreenDC = GetDC(0); 00422 EnumFontFamiliesEx(hScreenDC, &lfFont, (FONTENUMPROC)EnumFontFamExProc, (LPARAM)GetDlgItem(hwndDlg, IDC_ADVAPPEARANCE_FONT_C), 0); 00423 ReleaseDC(0, hScreenDC); 00424 00425 /* Fill font size combo */ 00426 for (i = 6; i <= 24; i++) 00427 { 00428 wsprintf(Size, TEXT("%d"), i); 00429 SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E, CB_ADDSTRING, 0, (LPARAM)&Size); 00430 } 00431 00432 /* Update the controls */ 00433 iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETCURSEL, 0, 0); 00434 g->CurrentElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0); 00435 UpdateControls(hwndDlg, g); 00436 } 00437 00438 00439 static VOID 00440 AdvAppearanceDlg_CleanUp(HWND hwndDlg, GLOBALS* g) 00441 { 00442 DeleteObject(g->hBoldFont); 00443 DeleteObject(g->hItalicFont); 00444 } 00445 00446 00447 static VOID 00448 SelectComboByElement(HWND hwnd, INT id, LPARAM lParam) 00449 { 00450 INT nCount; 00451 INT i; 00452 00453 nCount = SendDlgItemMessage(hwnd, id, CB_GETCOUNT, 0, 0); 00454 if (nCount == CB_ERR) 00455 return; 00456 00457 for (i = 0; i < nCount; i++) 00458 { 00459 if (SendDlgItemMessage(hwnd, id, CB_GETITEMDATA, (WPARAM)i, 0) == lParam) 00460 { 00461 SendDlgItemMessage(hwnd, id, CB_SETCURSEL, (WPARAM)i, 0); 00462 break; 00463 } 00464 } 00465 } 00466 00467 00468 static VOID 00469 GetSelectedComboText(HWND hwnd, INT id, LPWSTR lpStr) 00470 { 00471 INT nCount; 00472 00473 nCount = SendDlgItemMessage(hwnd, id, CB_GETCURSEL, 0, 0); 00474 if (nCount == CB_ERR) 00475 { 00476 *lpStr = 0; 00477 return; 00478 } 00479 00480 nCount = SendDlgItemMessage(hwnd, id, CB_GETLBTEXT, (WPARAM)nCount, (LPARAM)lpStr); 00481 if (nCount == CB_ERR) 00482 { 00483 *lpStr = 0; 00484 } 00485 } 00486 00487 00488 static INT 00489 GetSelectedComboInt(HWND hwnd, INT id) 00490 { 00491 TCHAR szBuffer[80]; 00492 INT nCount; 00493 00494 nCount = SendDlgItemMessage(hwnd, id, CB_GETCURSEL, 0, 0); 00495 if (nCount == CB_ERR) 00496 return 0; 00497 00498 nCount = SendDlgItemMessage(hwnd, id, CB_GETLBTEXT, (WPARAM)nCount, (LPARAM)szBuffer); 00499 if (nCount == CB_ERR) 00500 return 0; 00501 00502 return _ttoi(szBuffer); 00503 } 00504 00505 00506 static INT 00507 GetEditedComboInt(HWND hwnd, INT id) 00508 { 00509 INT nCount; 00510 BOOL bTranslated; 00511 00512 nCount = GetDlgItemInt(hwnd, id, &bTranslated, FALSE); 00513 if (bTranslated == FALSE) 00514 return 12; 00515 00516 return nCount; 00517 } 00518 00519 00520 00521 INT_PTR CALLBACK 00522 AdvAppearanceDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 00523 { 00524 INT iListIndex; 00525 GLOBALS* g; 00526 00527 g = (GLOBALS*)GetWindowLongPtr(hwndDlg, DWLP_USER); 00528 00529 switch (uMsg) 00530 { 00531 case WM_INITDIALOG: 00532 g = (GLOBALS*)lParam; 00533 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)g); 00534 AdvAppearanceDlg_Init(hwndDlg, g); 00535 break; 00536 00537 case WM_DESTROY: 00538 AdvAppearanceDlg_CleanUp(hwndDlg, g); 00539 break; 00540 00541 case WM_COMMAND: 00542 switch(LOWORD(wParam)) 00543 { 00544 case IDOK: 00545 SaveCurrentValues(hwndDlg, g); 00546 EndDialog(hwndDlg, IDOK); 00547 break; 00548 00549 case IDCANCEL: 00550 g->SchemeAdv = g->Scheme; 00551 EndDialog(hwndDlg, IDCANCEL); 00552 break; 00553 00554 case IDC_APPEARANCE_PREVIEW: 00555 SaveCurrentValues(hwndDlg, g); 00556 SelectComboByElement(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, lParam); 00557 g->CurrentElement = (INT)lParam; 00558 UpdateControls(hwndDlg, g); 00559 break; 00560 00561 case IDC_ADVAPPEARANCE_ELEMENT: 00562 if (HIWORD(wParam) == CBN_SELCHANGE) 00563 { 00564 SaveCurrentValues(hwndDlg, g); 00565 iListIndex = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETCURSEL, 0, 0); 00566 g->CurrentElement = SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_ELEMENT, CB_GETITEMDATA, (WPARAM)iListIndex, 0); 00567 UpdateControls(hwndDlg, g); 00568 } 00569 break; 00570 00571 case IDC_ADVAPPEARANCE_SIZE_E: 00572 if (g && HIWORD(wParam) == EN_CHANGE) 00573 { 00574 INT i = (INT)LOWORD(SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_SIZE_UD, UDM_GETPOS,0,0L)); 00575 00576 switch (g->CurrentElement) 00577 { 00578 case IDX_INACTIVE_CAPTION: 00579 case IDX_ACTIVE_CAPTION: 00580 case IDX_CAPTION_BUTTON: 00581 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCYCAPTION, 0, i); 00582 break; 00583 00584 case IDX_MENU: 00585 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCYMENU, 0, i); 00586 break; 00587 00588 case IDX_SCROLLBAR: 00589 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCXSCROLLBAR, 0, i); 00590 break; 00591 00592 case IDX_INACTIVE_BORDER: 00593 case IDX_ACTIVE_BORDER: 00594 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_SETCYSIZEFRAME, 0, i); 00595 break; 00596 } 00597 } 00598 break; 00599 00600 case IDC_ADVAPPEARANCE_FONT_C: 00601 if (g && HIWORD(wParam) == CBN_SELCHANGE) 00602 { 00603 switch (g->CurrentElement) 00604 { 00605 case IDX_INACTIVE_CAPTION: 00606 case IDX_ACTIVE_CAPTION: 00607 GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, 00608 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName); 00609 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00610 break; 00611 00612 case IDX_MENU: 00613 GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, 00614 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName); 00615 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00616 break; 00617 00618 case IDX_DIALOG: 00619 GetSelectedComboText(hwndDlg, IDC_ADVAPPEARANCE_FONT_C, 00620 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfFaceName); 00621 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00622 break; 00623 } 00624 } 00625 break; 00626 00627 case IDC_ADVAPPEARANCE_FONTSIZE_E: 00628 if (g && HIWORD(wParam) == CBN_SELCHANGE) 00629 { 00630 HDC hdcDlg = GetDC(hwndDlg); 00631 INT i; 00632 00633 switch (g->CurrentElement) 00634 { 00635 case IDX_INACTIVE_CAPTION: 00636 case IDX_ACTIVE_CAPTION: 00637 i = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E); 00638 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight = 00639 -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72); 00640 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00641 break; 00642 00643 case IDX_MENU: 00644 i = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E); 00645 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight = 00646 -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72); 00647 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00648 break; 00649 00650 case IDX_DIALOG: 00651 i = GetSelectedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E); 00652 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight = 00653 -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72); 00654 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00655 break; 00656 } 00657 00658 ReleaseDC(hwndDlg, hdcDlg); 00659 } 00660 else if (g && HIWORD(wParam) == CBN_EDITCHANGE) 00661 { 00662 HDC hdcDlg = GetDC(hwndDlg); 00663 INT i; 00664 00665 switch (g->CurrentElement) 00666 { 00667 case IDX_INACTIVE_CAPTION: 00668 case IDX_ACTIVE_CAPTION: 00669 i = GetEditedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E); 00670 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight = 00671 -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72); 00672 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00673 break; 00674 00675 case IDX_MENU: 00676 i = GetEditedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E); 00677 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight = 00678 -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72); 00679 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00680 break; 00681 00682 case IDX_DIALOG: 00683 i = GetEditedComboInt(hwndDlg, IDC_ADVAPPEARANCE_FONTSIZE_E); 00684 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfHeight = 00685 -MulDiv(i , GetDeviceCaps(hdcDlg, LOGPIXELSY), 72); 00686 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00687 break; 00688 } 00689 00690 ReleaseDC(hwndDlg, hdcDlg); 00691 } 00692 break; 00693 00694 case IDC_ADVAPPEARANCE_FONTBOLD: 00695 if (g && HIWORD(wParam) == BN_CLICKED) 00696 { 00697 INT i; 00698 00699 switch (g->CurrentElement) 00700 { 00701 case IDX_INACTIVE_CAPTION: 00702 case IDX_ACTIVE_CAPTION: 00703 i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0); 00704 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight = 00705 (i == BST_CHECKED) ? FW_BOLD : FW_NORMAL; 00706 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00707 break; 00708 00709 case IDX_MENU: 00710 i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0); 00711 00712 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight = 00713 (i == BST_CHECKED) ? FW_BOLD : FW_NORMAL; 00714 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00715 break; 00716 00717 case IDX_DIALOG: 00718 i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTBOLD, BM_GETCHECK, 0, 0); 00719 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfWeight = 00720 (i == BST_CHECKED) ? FW_BOLD : FW_NORMAL; 00721 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00722 break; 00723 } 00724 } 00725 break; 00726 00727 case IDC_ADVAPPEARANCE_FONTITALIC: 00728 if (g && HIWORD(wParam) == BN_CLICKED) 00729 { 00730 INT i; 00731 00732 switch (g->CurrentElement) 00733 { 00734 case IDX_INACTIVE_CAPTION: 00735 case IDX_ACTIVE_CAPTION: 00736 i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0); 00737 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic = 00738 (i == BST_CHECKED) ? TRUE : FALSE; 00739 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00740 break; 00741 00742 case IDX_MENU: 00743 i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0); 00744 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic = 00745 (i == BST_CHECKED) ? TRUE : FALSE; 00746 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00747 break; 00748 00749 case IDX_DIALOG: 00750 i = (INT)SendDlgItemMessage(hwndDlg, IDC_ADVAPPEARANCE_FONTITALIC, BM_GETCHECK, 0, 0); 00751 g->SchemeAdv.lfFont[g_Assignment[g->CurrentElement].Font].lfItalic = 00752 (i == BST_CHECKED) ? TRUE : FALSE; 00753 SendDlgItemMessage(hwndDlg, IDC_APPEARANCE_PREVIEW, PVM_UPDATETHEME, 0, (LPARAM)&g->SchemeAdv); 00754 break; 00755 } 00756 } 00757 break; 00758 00759 case IDC_ADVAPPEARANCE_COLOR1_B: 00760 GetColor(hwndDlg, g, 0); 00761 break; 00762 00763 case IDC_ADVAPPEARANCE_COLOR2_B: 00764 GetColor(hwndDlg, g, 1); 00765 break; 00766 00767 case IDC_ADVAPPEARANCE_FONTCOLOR_B: 00768 GetColor(hwndDlg, g, 2); 00769 break; 00770 00771 default: 00772 return FALSE; 00773 } 00774 break; 00775 00776 default: 00777 return FALSE; 00778 } 00779 00780 return TRUE; 00781 } Generated on Mon May 28 2012 04:20:32 for ReactOS by
1.7.6.1
|