504 lines
19 KiB
C++
504 lines
19 KiB
C++
//Copyright (c) 1997-2000 Microsoft Corporation
|
|
/* LOOKDLG.C
|
|
**
|
|
**
|
|
**
|
|
** History:
|
|
**
|
|
*/
|
|
#include "pch.hxx" // PCH
|
|
#pragma hdrstop
|
|
|
|
#include "AccWiz.h"
|
|
|
|
#include "desk.h"
|
|
#include "deskid.h"
|
|
#include "look.h"
|
|
#include <commdlg.h>
|
|
#include <commctrl.h>
|
|
#include <regstr.h>
|
|
#include "help.h"
|
|
|
|
|
|
|
|
#define RGB_PALETTE 0x02000000
|
|
|
|
void FAR SetMagicColors(HDC, DWORD, WORD);
|
|
|
|
#define CENTRIES_3D 3
|
|
|
|
HPALETTE g_hpal3D = NULL; // only exist if palette device
|
|
HPALETTE g_hpalVGA = NULL; // only exist if palette device
|
|
BOOL g_bPalette = FALSE; // is this a palette device?
|
|
int cyBorder;
|
|
int cxBorder;
|
|
int cxEdge;
|
|
int cyEdge;
|
|
|
|
HWND g_hwndTooltip;
|
|
|
|
LOOK_FONT g_fonts[NUM_FONTS];
|
|
HBRUSH g_brushes[NT40_COLOR_MAX];
|
|
|
|
BOOL g_bInit = TRUE;
|
|
|
|
BOOL g_fProprtySheetExiting = FALSE;
|
|
|
|
#define METRIC_CHANGE 0x0001
|
|
#define COLOR_CHANGE 0x0002
|
|
#define SCHEME_CHANGE 0x8000
|
|
UINT g_fChanged;
|
|
|
|
LOOK_SIZE g_sizes[NUM_SIZES] = {
|
|
/* SIZE_FRAME */ {0, 0, 50},
|
|
/* SIZE_SCROLL */ {0, 8, 100},
|
|
/* SIZE_CAPTION */ {0, 8, 100},
|
|
/* SIZE_SMCAPTION */ {0, 4, 100},
|
|
/* SIZE_MENU */ {0, 8, 100},
|
|
/* SIZE_DXICON */ {0, 0, 150}, // x spacing
|
|
/* SIZE_DYICON */ {0, 0, 150}, // y spacing
|
|
/* SIZE_ICON */ {0, 16, 72}, // shell icon size
|
|
/* SIZE_SMICON */ {0, 8, 36}, // shell small icon size
|
|
};
|
|
|
|
LOOK_SIZE g_elCurSize;
|
|
|
|
#define COLORFLAG_SOLID 0x0001
|
|
|
|
UINT g_colorFlags[NT40_COLOR_MAX] = {
|
|
/* COLOR_SCROLLBAR */ 0,
|
|
/* COLOR_DESKTOP */ 0,
|
|
/* COLOR_ACTIVECAPTION */ COLORFLAG_SOLID,
|
|
/* COLOR_INACTIVECAPTION */ COLORFLAG_SOLID,
|
|
/* COLOR_MENU */ COLORFLAG_SOLID,
|
|
/* COLOR_WINDOW */ COLORFLAG_SOLID,
|
|
/* COLOR_WINDOWFRAME */ COLORFLAG_SOLID,
|
|
/* COLOR_MENUTEXT */ COLORFLAG_SOLID,
|
|
/* COLOR_WINDOWTEXT */ COLORFLAG_SOLID,
|
|
/* COLOR_CAPTIONTEXT */ COLORFLAG_SOLID,
|
|
/* COLOR_ACTIVEBORDER */ 0,
|
|
/* COLOR_INACTIVEBORDER */ 0,
|
|
/* COLOR_APPWORKSPACE */ 0,
|
|
/* COLOR_HIGHLIGHT */ COLORFLAG_SOLID,
|
|
/* COLOR_HIGHLIGHTTEXT */ COLORFLAG_SOLID,
|
|
/* COLOR_3DFACE */ COLORFLAG_SOLID,
|
|
/* COLOR_3DSHADOW */ COLORFLAG_SOLID,
|
|
/* COLOR_GRAYTEXT */ COLORFLAG_SOLID,
|
|
/* COLOR_BTNTEXT */ COLORFLAG_SOLID,
|
|
/* COLOR_INACTIVECAPTIONTEXT */ COLORFLAG_SOLID,
|
|
/* COLOR_3DHILIGHT */ COLORFLAG_SOLID,
|
|
/* COLOR_3DDKSHADOW */ COLORFLAG_SOLID,
|
|
/* COLOR_3DLIGHT */ COLORFLAG_SOLID,
|
|
/* COLOR_INFOTEXT */ COLORFLAG_SOLID,
|
|
/* COLOR_INFOBK */ 0,
|
|
/* COLOR_3DALTFACE */ COLORFLAG_SOLID,
|
|
/* COLOR_HOTLIGHT */ COLORFLAG_SOLID,
|
|
/* COLOR_GRADIENTACTIVECAPTION */ COLORFLAG_SOLID,
|
|
/* COLOR_GRADIENTINACTIVECAPTION */ COLORFLAG_SOLID
|
|
#if(WINVER >= 0x0501)
|
|
/* COLOR_MENUHILIGHT */, COLORFLAG_SOLID,
|
|
/* COLOR_MENUBAR */ COLORFLAG_SOLID
|
|
#endif /* WINVER >= 0x0501 */
|
|
};
|
|
|
|
// strings for color names.
|
|
PTSTR s_pszColorNames[NT40_COLOR_MAX] = {
|
|
/* COLOR_SCROLLBAR */ TEXT("Scrollbar"),
|
|
/* COLOR_DESKTOP */ TEXT("Background"),
|
|
/* COLOR_ACTIVECAPTION */ TEXT("ActiveTitle"),
|
|
/* COLOR_INACTIVECAPTION */ TEXT("InactiveTitle"),
|
|
/* COLOR_MENU */ TEXT("Menu"),
|
|
/* COLOR_WINDOW */ TEXT("Window"),
|
|
/* COLOR_WINDOWFRAME */ TEXT("WindowFrame"),
|
|
/* COLOR_MENUTEXT */ TEXT("MenuText"),
|
|
/* COLOR_WINDOWTEXT */ TEXT("WindowText"),
|
|
/* COLOR_CAPTIONTEXT */ TEXT("TitleText"),
|
|
/* COLOR_ACTIVEBORDER */ TEXT("ActiveBorder"),
|
|
/* COLOR_INACTIVEBORDER */ TEXT("InactiveBorder"),
|
|
/* COLOR_APPWORKSPACE */ TEXT("AppWorkspace"),
|
|
/* COLOR_HIGHLIGHT */ TEXT("Hilight"),
|
|
/* COLOR_HIGHLIGHTTEXT */ TEXT("HilightText"),
|
|
/* COLOR_3DFACE */ TEXT("ButtonFace"),
|
|
/* COLOR_3DSHADOW */ TEXT("ButtonShadow"),
|
|
/* COLOR_GRAYTEXT */ TEXT("GrayText"),
|
|
/* COLOR_BTNTEXT */ TEXT("ButtonText"),
|
|
/* COLOR_INACTIVECAPTIONTEXT */ TEXT("InactiveTitleText"),
|
|
/* COLOR_3DHILIGHT */ TEXT("ButtonHilight"),
|
|
/* COLOR_3DDKSHADOW */ TEXT("ButtonDkShadow"),
|
|
/* COLOR_3DLIGHT */ TEXT("ButtonLight"),
|
|
/* COLOR_INFOTEXT */ TEXT("InfoText"),
|
|
/* COLOR_INFOBK */ TEXT("InfoWindow"),
|
|
/* COLOR_3DALTFACE */ TEXT("ButtonAlternateFace"),
|
|
/* COLOR_HOTLIGHT */ TEXT("HotTracking"),
|
|
/* COLOR_GRADIENTACTIVECAPTION */ TEXT("GradientActiveTitle"),
|
|
/* COLOR_GRADIENTINACTIVECAPTION */ TEXT("GradientInactiveTitle")
|
|
#if(WINVER >= 0x0501)
|
|
/* COLOR_MENUHILIGHT */ ,TEXT("MenuHighlighted"),
|
|
/* COLOR_MENUBAR */ TEXT("MenuBar")
|
|
#endif /* WINVER >= 0x0501 */
|
|
};
|
|
TCHAR g_szColors[] = TEXT("colors"); // colors section name
|
|
|
|
// Location of the Colors subkey in Registry; Defined in RegStr.h
|
|
TCHAR szRegStr_Colors[] = REGSTR_PATH_COLORS;
|
|
|
|
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
//this order has to match the enum order in look.h
|
|
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
LOOK_ELEMENT g_elements[] = {
|
|
/* ELEMENT_APPSPACE */ {COLOR_APPWORKSPACE, SIZE_NONE, FALSE, COLOR_NONE, FONT_NONE, ELNAME_APPSPACE, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_DESKTOP */ {COLOR_BACKGROUND, SIZE_NONE, FALSE, COLOR_NONE, FONT_NONE, ELNAME_DESKTOP, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_INACTIVEBORDER */ {COLOR_INACTIVEBORDER, SIZE_FRAME, FALSE, COLOR_NONE, FONT_NONE, ELNAME_INACTIVEBORDER, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_ACTIVEBORDER */ {COLOR_ACTIVEBORDER, SIZE_FRAME, FALSE, COLOR_NONE, FONT_NONE, ELNAME_ACTIVEBORDER, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_INACTIVECAPTION */ {COLOR_INACTIVECAPTION, SIZE_CAPTION, TRUE, COLOR_INACTIVECAPTIONTEXT,FONT_CAPTION,ELNAME_INACTIVECAPTION, -1,{-1,-1,-1,-1}, COLOR_GRADIENTINACTIVECAPTION},
|
|
/* ELEMENT_INACTIVESYSBUT1 */ {COLOR_NONE, SIZE_CAPTION, FALSE, COLOR_NONE, FONT_NONE, -1, ELEMENT_ACTIVESYSBUT1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_INACTIVESYSBUT2 */ {COLOR_NONE, SIZE_CAPTION, FALSE, COLOR_NONE, FONT_NONE, -1, ELEMENT_ACTIVESYSBUT1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_ACTIVECAPTION */ {COLOR_ACTIVECAPTION, SIZE_CAPTION, TRUE, COLOR_CAPTIONTEXT, FONT_CAPTION, ELNAME_ACTIVECAPTION, -1, {-1,-1,-1,-1}, COLOR_GRADIENTACTIVECAPTION},
|
|
/* ELEMENT_ACTIVESYSBUT1 */ {COLOR_NONE, SIZE_CAPTION, FALSE, COLOR_NONE, FONT_NONE, ELNAME_CAPTIONBUTTON, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_ACTIVESYSBUT2 */ {COLOR_NONE, SIZE_CAPTION, FALSE, COLOR_NONE, FONT_NONE, -1, ELEMENT_ACTIVESYSBUT1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_MENUNORMAL */ {COLOR_MENU, SIZE_MENU, TRUE, COLOR_MENUTEXT, FONT_MENU, ELNAME_MENU, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_MENUSELECTED */ {COLOR_HIGHLIGHT, SIZE_MENU, TRUE, COLOR_HIGHLIGHTTEXT, FONT_MENU, ELNAME_MENUSELECTED, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_MENUDISABLED */ {COLOR_MENU, SIZE_MENU, TRUE, COLOR_NONE, FONT_MENU, -1, ELEMENT_MENUNORMAL, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_WINDOW */ {COLOR_WINDOW, SIZE_NONE, FALSE, COLOR_WINDOWTEXT, FONT_NONE, ELNAME_WINDOW, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_MSGBOX */ {COLOR_NONE, SIZE_NONE, TRUE, COLOR_WINDOWTEXT, FONT_MSGBOX, ELNAME_MSGBOX, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_MSGBOXCAPTION */ {COLOR_ACTIVECAPTION, SIZE_CAPTION, TRUE, COLOR_CAPTIONTEXT, FONT_CAPTION, -1, ELEMENT_ACTIVECAPTION, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_MSGBOXSYSBUT */ {COLOR_3DFACE, SIZE_CAPTION, TRUE, COLOR_BTNTEXT, FONT_CAPTION, -1, ELEMENT_ACTIVESYSBUT1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
// do not even try to set a scrollbar color the system will ignore you
|
|
/* ELEMENT_SCROLLBAR */ {COLOR_NONE, SIZE_SCROLL, FALSE, COLOR_NONE, FONT_NONE, ELNAME_SCROLLBAR, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_SCROLLUP */ {COLOR_NONE, SIZE_SCROLL, FALSE, COLOR_NONE, FONT_NONE, -1, ELEMENT_SCROLLBAR, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_SCROLLDOWN */ {COLOR_NONE, SIZE_SCROLL, FALSE, COLOR_NONE, FONT_NONE, -1, ELEMENT_SCROLLBAR, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_BUTTON */ {COLOR_3DFACE, SIZE_NONE, FALSE, COLOR_BTNTEXT, FONT_NONE, ELNAME_BUTTON, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_SMCAPTION */ {COLOR_NONE, SIZE_SMCAPTION, TRUE, COLOR_NONE, FONT_SMCAPTION,ELNAME_SMALLCAPTION, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_ICON */ {COLOR_NONE, SIZE_ICON, FALSE, COLOR_NONE, FONT_ICONTITLE,ELNAME_ICON, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_ICONHORZSPACING */ {COLOR_NONE, SIZE_DXICON, FALSE, COLOR_NONE, FONT_NONE, ELNAME_DXICON, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_ICONVERTSPACING */ {COLOR_NONE, SIZE_DYICON, FALSE, COLOR_NONE, FONT_NONE, ELNAME_DYICON, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
/* ELEMENT_INFO */ {COLOR_INFOBK, SIZE_NONE, TRUE, COLOR_INFOTEXT, FONT_STATUS, ELNAME_INFO, -1, {-1,-1,-1,-1}, COLOR_NONE},
|
|
};
|
|
|
|
// used by ChooseColor dialog
|
|
COLORREF g_CustomColors[16];
|
|
|
|
// structure used to store a scheme in the registry
|
|
#ifdef UNICODE
|
|
# define SCHEME_VERSION 2 // Ver 2 == Unicode
|
|
#else
|
|
# define SCHEME_VERSION 1 // Ver 1 == Win95 ANSI
|
|
#endif
|
|
|
|
/*
|
|
* Note -- this must match the High Contrast accessibility code
|
|
* in windows\gina\winlogon.
|
|
*/
|
|
|
|
typedef struct {
|
|
SHORT version;
|
|
WORD wDummy; // for alignment
|
|
NONCLIENTMETRICS ncm;
|
|
LOGFONT lfIconTitle;
|
|
COLORREF rgb[NT40_COLOR_MAX];
|
|
} SCHEMEDATA;
|
|
|
|
|
|
HWND g_hDlg = NULL; // nonzero if page is up
|
|
int g_iCurElement = -2; // start off as not even "not set"
|
|
int g_LogDPI = 96; // logical resolution of display
|
|
#define ELCUR (g_elements[g_iCurElement])
|
|
#define ELCURFONT (g_fonts[ELCUR.iFont])
|
|
// this one kept separately for range purposes
|
|
#define ELCURSIZE g_elCurSize
|
|
int g_iPrevSize = SIZE_NONE;
|
|
|
|
#define MAXSCHEMENAME 100
|
|
TCHAR g_szCurScheme[MAXSCHEMENAME]; // current scheme name
|
|
TCHAR g_szLastScheme[MAXSCHEMENAME]; // last scheme they had
|
|
|
|
HBRUSH g_hbrMainColor = NULL;
|
|
HBRUSH g_hbrTextColor = NULL;
|
|
HBRUSH g_hbrGradColor = NULL;
|
|
|
|
const TCHAR c_szRegPathUserMetrics[] = TEXT("Control Panel\\Desktop\\WindowMetrics");
|
|
const TCHAR c_szRegValIconSize[] = TEXT("Shell Icon Size");
|
|
const TCHAR c_szRegValSmallIconSize[] = TEXT("Shell Small Icon Size");
|
|
|
|
void NEAR PASCAL Look_Repaint(HWND hDlg, BOOL bRecalc);
|
|
BOOL NEAR PASCAL Look_ChangeColor(HWND hDlg, int iColor, COLORREF rgb);
|
|
BOOL CALLBACK SaveSchemeDlgProc(HWND, UINT, WPARAM, LPARAM);
|
|
void NEAR PASCAL Look_UpdateSizeBasedOnFont(HWND hDlg, BOOL fComputeIdeal);
|
|
void NEAR PASCAL Look_SetCurSizeAndRange(HWND hDlg);
|
|
void NEAR PASCAL Look_SyncSize(HWND hDlg);
|
|
void NEAR PASCAL Look_DoSizeStuff(HWND hDlg, BOOL fCanComputeIdeal);
|
|
|
|
|
|
COLORREF GetNearestPaletteColor(HPALETTE hpal, COLORREF rgb)
|
|
{
|
|
PALETTEENTRY pe;
|
|
GetPaletteEntries(hpal, GetNearestPaletteIndex(hpal, rgb & 0x00FFFFFF), 1, &pe);
|
|
return RGB(pe.peRed, pe.peGreen, pe.peBlue);
|
|
}
|
|
|
|
BOOL IsPaletteColor(HPALETTE hpal, COLORREF rgb)
|
|
{
|
|
return GetNearestPaletteColor(hpal, rgb) == (rgb & 0xFFFFFF);
|
|
}
|
|
|
|
COLORREF NearestColor(int iColor, COLORREF rgb)
|
|
{
|
|
rgb &= 0x00FFFFFF;
|
|
|
|
//
|
|
// if we are on a palette device, we need to do special stuff...
|
|
//
|
|
if (g_bPalette)
|
|
{
|
|
if (g_colorFlags[iColor] & COLORFLAG_SOLID)
|
|
{
|
|
if (IsPaletteColor(g_hpal3D, rgb))
|
|
rgb |= RGB_PALETTE;
|
|
else
|
|
rgb = GetNearestPaletteColor(g_hpalVGA, rgb);
|
|
}
|
|
else
|
|
{
|
|
if (IsPaletteColor(g_hpal3D, rgb))
|
|
rgb |= RGB_PALETTE;
|
|
|
|
else if (IsPaletteColor((HPALETTE)GetStockObject(DEFAULT_PALETTE), rgb))
|
|
rgb ^= 0x000001; // force a dither
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// map color to nearest color if we need to for this UI element.
|
|
if (g_colorFlags[iColor] & COLORFLAG_SOLID)
|
|
{
|
|
HDC hdc = GetDC(NULL);
|
|
rgb = GetNearestColor(hdc, rgb);
|
|
ReleaseDC(NULL, hdc);
|
|
}
|
|
}
|
|
|
|
return rgb;
|
|
}
|
|
|
|
|
|
|
|
void NEAR PASCAL Set3DPaletteColor(COLORREF rgb, int iColor)
|
|
{
|
|
int iPalette;
|
|
PALETTEENTRY pe;
|
|
|
|
if (!g_hpal3D)
|
|
return;
|
|
|
|
switch (iColor)
|
|
{
|
|
case COLOR_3DFACE:
|
|
iPalette = 16;
|
|
break;
|
|
case COLOR_3DSHADOW:
|
|
iPalette = 17;
|
|
break;
|
|
case COLOR_3DHILIGHT:
|
|
iPalette = 18;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
pe.peRed = GetRValue(rgb);
|
|
pe.peGreen = GetGValue(rgb);
|
|
pe.peBlue = GetBValue(rgb);
|
|
pe.peFlags = 0;
|
|
SetPaletteEntries(g_hpal3D, iPalette, 1, (LPPALETTEENTRY)&pe);
|
|
}
|
|
|
|
|
|
void NEAR PASCAL Look_RebuildSysStuff(BOOL fInit)
|
|
{
|
|
int i;
|
|
PALETTEENTRY pal[4];
|
|
HPALETTE hpal = (HPALETTE)GetStockObject(DEFAULT_PALETTE);
|
|
|
|
SelectObject(g_hdcMem, GetStockObject(BLACK_BRUSH));
|
|
SelectObject(g_hdcMem, GetStockObject(SYSTEM_FONT));
|
|
|
|
for (i = 0; i < NUM_FONTS; i++)
|
|
{
|
|
if (g_fonts[i].hfont)
|
|
DeleteObject(g_fonts[i].hfont);
|
|
g_fonts[i].hfont = CreateFontIndirect(&g_fonts[i].lf);
|
|
}
|
|
|
|
if (fInit)
|
|
{
|
|
// get current magic colors
|
|
GetPaletteEntries(hpal, 8, 4, pal);
|
|
SetPaletteEntries(g_hpal3D, 16, 4, pal);
|
|
|
|
// set up magic colors in the 3d palette
|
|
if (!IsPaletteColor(hpal, g_Options.m_schemePreview.m_rgb[COLOR_3DFACE]))
|
|
{
|
|
Set3DPaletteColor(g_Options.m_schemePreview.m_rgb[COLOR_3DFACE], COLOR_3DFACE);
|
|
Set3DPaletteColor(g_Options.m_schemePreview.m_rgb[COLOR_3DSHADOW], COLOR_3DSHADOW);
|
|
Set3DPaletteColor(g_Options.m_schemePreview.m_rgb[COLOR_3DHILIGHT], COLOR_3DHILIGHT);
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < NT40_COLOR_MAX; i++)
|
|
{
|
|
if (g_brushes[i])
|
|
DeleteObject(g_brushes[i]);
|
|
|
|
g_brushes[i] = CreateSolidBrush(NearestColor(i, g_Options.m_schemePreview.m_rgb[i]));
|
|
}
|
|
}
|
|
|
|
#ifndef LF32toLF
|
|
|
|
void NEAR LF32toLF(LPLOGFONT_32 lplf32, LPLOGFONT lplf)
|
|
{
|
|
lplf->lfHeight = (int) lplf32->lfHeight;
|
|
lplf->lfWidth = (int) lplf32->lfWidth;
|
|
lplf->lfEscapement = (int) lplf32->lfEscapement;
|
|
lplf->lfOrientation = (int) lplf32->lfOrientation;
|
|
lplf->lfWeight = (int) lplf32->lfWeight;
|
|
*((LPCOMMONFONT) &lplf->lfItalic) = lplf32->lfCommon;
|
|
}
|
|
#endif
|
|
|
|
|
|
void NEAR SetMyNonClientMetrics(LPNONCLIENTMETRICS lpncm)
|
|
{
|
|
g_sizes[SIZE_FRAME].CurSize = (int)lpncm->iBorderWidth;
|
|
g_sizes[SIZE_SCROLL].CurSize = (int)lpncm->iScrollWidth;
|
|
g_sizes[SIZE_CAPTION].CurSize = (int)lpncm->iCaptionHeight;
|
|
g_sizes[SIZE_SMCAPTION].CurSize = (int)lpncm->iSmCaptionHeight;
|
|
g_sizes[SIZE_MENU].CurSize = (int)lpncm->iMenuHeight;
|
|
|
|
LF32toLF(&(lpncm->lfCaptionFont), &(g_fonts[FONT_CAPTION].lf));
|
|
LF32toLF(&(lpncm->lfSmCaptionFont), &(g_fonts[FONT_SMCAPTION].lf));
|
|
LF32toLF(&(lpncm->lfMenuFont), &(g_fonts[FONT_MENU].lf));
|
|
LF32toLF(&(lpncm->lfStatusFont), &(g_fonts[FONT_STATUS].lf));
|
|
LF32toLF(&(lpncm->lfMessageFont), &(g_fonts[FONT_MSGBOX].lf));
|
|
}
|
|
|
|
/*
|
|
** Fill in a NONCLIENTMETRICS structure with latest preview stuff
|
|
*/
|
|
void NEAR GetMyNonClientMetrics(LPNONCLIENTMETRICS lpncm)
|
|
{
|
|
lpncm->iBorderWidth = (LONG)g_sizes[SIZE_FRAME].CurSize;
|
|
lpncm->iScrollWidth = lpncm->iScrollHeight = (LONG)g_sizes[SIZE_SCROLL].CurSize;
|
|
lpncm->iCaptionWidth = lpncm->iCaptionHeight = (LONG)g_sizes[SIZE_CAPTION].CurSize;
|
|
lpncm->iSmCaptionWidth = lpncm->iSmCaptionHeight = (LONG)g_sizes[SIZE_SMCAPTION].CurSize;
|
|
lpncm->iMenuWidth = lpncm->iMenuHeight = (LONG)g_sizes[SIZE_MENU].CurSize;
|
|
LFtoLF32(&(g_fonts[FONT_CAPTION].lf), &(lpncm->lfCaptionFont));
|
|
LFtoLF32(&(g_fonts[FONT_SMCAPTION].lf), &(lpncm->lfSmCaptionFont));
|
|
LFtoLF32(&(g_fonts[FONT_MENU].lf), &(lpncm->lfMenuFont));
|
|
LFtoLF32(&(g_fonts[FONT_STATUS].lf), &(lpncm->lfStatusFont));
|
|
LFtoLF32(&(g_fonts[FONT_MSGBOX].lf), &(lpncm->lfMessageFont));
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
** clean up any mess made in maintaining system information
|
|
** also, write out any global changes in our setup.
|
|
*/
|
|
void NEAR PASCAL Look_DestroySysStuff(void)
|
|
{
|
|
int i;
|
|
HKEY hkAppear;
|
|
|
|
SelectObject(g_hdcMem, GetStockObject(BLACK_BRUSH));
|
|
SelectObject(g_hdcMem, GetStockObject(SYSTEM_FONT));
|
|
|
|
for (i = 0; i < NUM_FONTS; i++)
|
|
{
|
|
if (g_fonts[i].hfont)
|
|
DeleteObject(g_fonts[i].hfont);
|
|
}
|
|
for (i = 0; i < NT40_COLOR_MAX; i++)
|
|
{
|
|
if (g_brushes[i])
|
|
DeleteObject(g_brushes[i]);
|
|
}
|
|
|
|
if (g_hpal3D)
|
|
DeleteObject(g_hpal3D);
|
|
|
|
if (g_hpalVGA)
|
|
DeleteObject(g_hpalVGA);
|
|
|
|
// save out possible changes to custom color table
|
|
if (RegOpenKey(HKEY_CURRENT_USER, REGSTR_PATH_APPEARANCE, &hkAppear) == ERROR_SUCCESS)
|
|
{
|
|
RegSetValueEx(hkAppear, REGSTR_VAL_CUSTOMCOLORS, 0L, REG_BINARY,
|
|
(LPBYTE)g_CustomColors, sizeof(g_CustomColors));
|
|
}
|
|
}
|
|
|
|
//------------------------ mini font picker controls --------------------------
|
|
/*
|
|
** initialize the constant dialog components
|
|
**
|
|
** initialize the list of element names. this stays constant with the
|
|
** possible exception that some items might be added/removed depending
|
|
** on some special case conditions.
|
|
*/
|
|
|
|
void NEAR PASCAL Look_DestroyDialog(HWND hDlg)
|
|
{
|
|
HFONT hfont, hfontOther;
|
|
|
|
hfontOther = (HFONT)SendDlgItemMessage(hDlg, IDC_MAINSIZE, WM_GETFONT, 0, 0L);
|
|
hfont = (HFONT)SendDlgItemMessage(hDlg, IDC_FONTBOLD, WM_GETFONT, 0, 0L);
|
|
if (hfont && (hfont != hfontOther))
|
|
DeleteObject(hfont);
|
|
hfont = (HFONT)SendDlgItemMessage(hDlg, IDC_FONTITAL, WM_GETFONT, 0, 0L);
|
|
if (hfont && (hfont != hfontOther))
|
|
DeleteObject(hfont);
|
|
|
|
DestroyWindow(g_hwndTooltip);
|
|
}
|
|
|
|
|
|
#define LSE_SETCUR 0x0001
|
|
#define LSE_ALWAYS 0x0002
|
|
|
|
const static DWORD FAR aAppearanceHelpIds[] = {
|
|
IDC_SCHEMES, IDH_APPEAR_SCHEME,
|
|
IDC_SAVESCHEME, IDH_APPEAR_SAVEAS,
|
|
IDC_DELSCHEME, IDH_APPEAR_DELETE,
|
|
IDC_ELEMENTS, IDH_APPEAR_ITEM,
|
|
IDC_MAINCOLOR, IDH_APPEAR_BACKGRNDCOLOR,
|
|
IDC_SIZELABEL, IDH_APPEAR_ITEMSIZE,
|
|
IDC_MAINSIZE, IDH_APPEAR_ITEMSIZE,
|
|
IDC_SIZEARROWS, IDH_APPEAR_ITEMSIZE,
|
|
IDC_FONTLABEL, IDH_APPEAR_FONT,
|
|
IDC_FONTNAME, IDH_APPEAR_FONT,
|
|
IDC_FONTSIZE, IDH_APPEAR_FONTSIZE,
|
|
IDC_FONTBOLD, IDH_APPEAR_FONTBOLD,
|
|
IDC_FONTITAL, IDH_APPEAR_FONTITALIC,
|
|
IDC_LOOKPREV, IDH_APPEAR_GRAPHIC,
|
|
IDC_FONTSIZELABEL, IDH_APPEAR_FONTSIZE,
|
|
IDC_COLORLABEL, IDH_APPEAR_BACKGRNDCOLOR,
|
|
IDC_TEXTCOLOR, IDH_APPEAR_FONTCOLOR,
|
|
IDC_FNCOLORLABEL, IDH_APPEAR_FONTCOLOR,
|
|
|
|
0, 0
|
|
};
|
|
|
|
|
|
LONG WINAPI MyStrToLong(LPCTSTR sz)
|
|
{
|
|
long l=0;
|
|
|
|
while (*sz >= TEXT('0') && *sz <= TEXT('9'))
|
|
l = l*10 + (*sz++ - TEXT('0'));
|
|
|
|
return l;
|
|
}
|
|
|