#if !defined(__SPCOLORMANAGER_H__) #define __SPCOLORMANAGER_H__ #if _MSC_VER > 1000 #pragma once #endif //功能:当前XP风格的类型。 enum SPCurrentSystemTheme { SPSystemThemeUnknown , SPSystemThemeBlue , SPSystemThemeOlive , SPSystemThemeSilver , SPSystemThemeAuto , SPSystemThemeDefault }; #ifndef COLOR_GRADIENTACTIVECAPTION #define COLOR_GRADIENTACTIVECAPTION 27 #endif #ifndef COLOR_GRADIENTINACTIVECAPTION #define COLOR_GRADIENTINACTIVECAPTION 28 #endif const UINT XPCOLOR_BASE = 30; const UINT XPCOLOR_TOOLBAR_FACE = XPCOLOR_BASE; const UINT XPCOLOR_HIGHLIGHT = 31; const UINT XPCOLOR_HIGHLIGHT_BORDER = 32; const UINT XPCOLOR_HIGHLIGHT_PUSHED = 33; const UINT XPCOLOR_HIGHLIGHT_CHECKED = 36; const UINT XPCOLOR_HIGHLIGHT_CHECKED_BORDER = 37; const UINT XPCOLOR_ICONSHADDOW = 34; const UINT XPCOLOR_GRAYTEXT = 35; const UINT XPCOLOR_TOOLBAR_GRIPPER = 38; const UINT XPCOLOR_SEPARATOR = 39; const UINT XPCOLOR_DISABLED = 40; const UINT XPCOLOR_MENUBAR_FACE = 41; const UINT XPCOLOR_MENUBAR_EXPANDED = 42; const UINT XPCOLOR_MENUBAR_BORDER = 43; const UINT XPCOLOR_MENUBAR_TEXT = 44; const UINT XPCOLOR_HIGHLIGHT_TEXT = 45; const UINT XPCOLOR_TOOLBAR_TEXT = 46; const UINT XPCOLOR_PUSHED_TEXT = 47; const UINT XPCOLOR_TAB_INACTIVE_BACK = 48; const UINT XPCOLOR_TAB_INACTIVE_TEXT = 49; const UINT XPCOLOR_HIGHLIGHT_PUSHED_BORDER = 50; const UINT XPCOLOR_CHECKED_TEXT = XPCOLOR_HIGHLIGHT_TEXT; const UINT XPCOLOR_3DFACE = 51; const UINT XPCOLOR_3DSHADOW = 52; const UINT XPCOLOR_EDITCTRLBORDER = 53; const UINT XPCOLOR_FRAME = 54; const UINT XPCOLOR_SPLITTER_FACE = 55; const UINT XPCOLOR_LABEL = 56; const UINT XPCOLOR_STATICFRAME = 57; const UINT XPCOLOR_LAST = 57; //功能:绘制颜色封装。 class CSPPaintManagerColor { public: CSPPaintManagerColor() { m_clrStandardValue = m_clrCustomValue = ( COLORREF ) - 1; } BOOL IsDefaultValue() { return ( m_clrCustomValue == ( COLORREF ) - 1 ) && ( m_clrStandardValue == ( COLORREF ) - 1 ); } COLORREF GetStandardColor() { return m_clrStandardValue; } void SetCustomValue( COLORREF clr ) { m_clrCustomValue = clr; } void SetStandardValue( COLORREF clr ) { m_clrStandardValue = clr; } void SetDefaultValue() { m_clrCustomValue = ( COLORREF ) - 1; } operator COLORREF() { return ( m_clrCustomValue == ( COLORREF ) - 1 ) ? m_clrStandardValue : m_clrCustomValue; } const CSPPaintManagerColor & operator=( COLORREF clr ) { SetCustomValue( clr ); return *this; } protected: COLORREF m_clrStandardValue; COLORREF m_clrCustomValue; }; //功能:辅助类,用来绘制渐变色。 class CSPPaintManagerColorGradient { public: void SetStandardValue( COLORREF clrLight , COLORREF clrDark ); void SetCustomValue( COLORREF clrLight , COLORREF clrDark ); void SetStandardValue( const COLORREF & clr ); public: CSPPaintManagerColor clrLight; //亮色 CSPPaintManagerColor clrDark; //暗色 }; //功能:用来管理系统颜色。 class CSPColorManager : public CCmdTarget { public: typedef DWORD ( __stdcall *PFNGETSYSCOLOR )( int nIndex ); public: //功能: // 用来更新颜色值。 void RefreshColors( BOOL bInit = FALSE ); //功能: //获取窗口指定部分的颜色 //参数: // nIndex - 指定要获取颜色的部分 // //常量 数值 描述 //-------------------------------- ============ ------------------------------------------------------------ //COLOR_SCROLLBAR 0 滚动条颜色 //COLOR_BACKGROUND 1 桌面颜色 //COLOR_ACTIVECAPTION 2 活动标题栏颜色 //COLOR_INACTIVECAPTION 3 非活动标题栏颜色 //COLOR_MENU 4 菜单背景色 //COLOR_WINDOW 5 窗口背景色 //COLOR_WINDOWFRAME 6 窗口框架色 //COLOR_MENUTEXT 7 菜单文本颜色 //COLOR_WINDOWTEXT 8 窗口文本颜色 //COLOR_CAPTIONTEXT 9 标题栏文本颜色 //COLOR_ACTIVEBORDER 10 活动窗口边框颜色 //COLOR_INACTIVEBORDER 11 非活动窗口边框颜色 //COLOR_APPWORKSPACE 12 背景色MDI程序 //COLOR_HIGHLIGHT 13 被选项颜色 //COLOR_HIGHLIGHTTEXT 14 被选项文本颜色 //COLOR_BTNFACE 15 三维显示色活对话框背景色 //COLOR_BTNSHADOW 16 命令按钮边阴影颜色 //COLOR_GRAYTEXT 17 灰色文本色 //COLOR_BTNTEXT 18 按钮文本色 //COLOR_INACTIVECAPTIONTEXT 19 非活动标题栏颜色 //COLOR_BTNHIGHLIGHT 20 三维显示高亮颜色 //COLOR_3DDKSHADOW 21 三维显示暗阴影色 //COLOR_3DLIGHT 22 三位亮色 //COLOR_INFOTEXT 23 提示栏文本色 //COLOR_INFOBK 24 提示栏背景色 //COLOR_HOTLIGHT 26 热点颜色 //COLOR_GRADIENTACTIVECAPTION 27 窗口标题栏右边渐变颜色 //COLOR_GRADIENTINACTIVECAPTION 28 非窗口标题栏右边渐变颜色 //XPCOLOR_TOOLBAR_FACE 30 XP工具栏背景色 //XPCOLOR_HIGHLIGHT 31 XP被选菜单项颜色 //XPCOLOR_HIGHLIGHT_BORDER 32 XP被选菜单项边框色 //XPCOLOR_HIGHLIGHT_PUSHED 33 XP菜单项弹出色 //XPCOLOR_HIGHLIGHT_CHECKED 36 XP菜单项被选色 //XPCOLOR_HIGHLIGHT_CHECKED_BORDER 37 被选菜单项边框色 //XPCOLOR_ICONSHADDOW 34 XP菜单项图标阴影色 //XPCOLOR_GRAYTEXT 35 XP禁止菜单项文本色 //XPCOLOR_TOOLBAR_GRIPPER 38 XP工具栏gripper色 //XPCOLOR_SEPARATOR 39 XP工具栏分隔符颜色 //XPCOLOR_DISABLED 40 XP菜单图标禁止颜色 //XPCOLOR_MENUBAR_FACE 41 XP菜单项文本背景颜色 //XPCOLOR_MENUBAR_EXPANDED 42 XP隐藏菜单背景色 //XPCOLOR_MENUBAR_BORDER 43 XP菜单边框色 //XPCOLOR_MENUBAR_TEXT 44 XP菜单项文本色 //XPCOLOR_HIGHLIGHT_TEXT 45 XP选择菜单项文本色 //XPCOLOR_TOOLBAR_TEXT 46 XP工具栏文本色 //XPCOLOR_PUSHED_TEXT 47 XP工具栏选择文本色 //XPCOLOR_TAB_INACTIVE_BACK 48 XP 非活动tab背景色 //XPCOLOR_TAB_INACTIVE_TEXT 49 XP 非活动tab文本颜色 //XPCOLOR_HIGHLIGHT_PUSHED_BORDER 50 三维项边框颜色 //XPCOLOR_CHECKED_TEXT 45 被选按钮文本颜色 //XPCOLOR_3DFACE 51 三维外观颜色 //XPCOLOR_3DSHADOW 52 三维外观阴影颜色 //XPCOLOR_EDITCTRLBORDER 53 EDIT控件边框颜色 //XPCOLOR_FRAME 54 Office 2003 框架颜色 //XPCOLOR_SPLITTER_FACE 55 XP splitter颜色 //XPCOLOR_LABEL 56 标签颜色 //XPCOLOR_STATICFRAME 57 WinXP静态控件颜色 // COLORREF GetColor( int nIndex ); //功能:渲染亮色和暗色。 COLORREF LightColor( COLORREF clrLight , COLORREF clrDark , int nDelta ); //功能:禁用luna (Blue, Olive and Green)颜色 void DisableLunaColors( BOOL bDisable = TRUE ); //功能:是否禁用luna (Blue, Olive and Green)颜色 BOOL IsLunaColorsDisabled(); //功能:自定义指定的颜色。 void SetColor( int nIndex , COLORREF clrValue ); //功能:自定义颜色。 void SetColors( int cElements , const int * lpaElements , const COLORREF * lpaRgbValues ); //功能:判断当前使用的风格。 SPCurrentSystemTheme GetCurrentSystemTheme(); //功能:获取当前在使用的Windows XP风格。 SPCurrentSystemTheme GetWinThemeWrapperTheme(); //功能:设置当前风格。 void SetLunaTheme( SPCurrentSystemTheme systemTheme ); //功能: 替换系统定义的颜色获取函数。 void SetGetSysColorPtr( PFNGETSYSCOLOR pfnGetSysColor ); private: CSPColorManager(); void RefreshSysColors(); void RefreshXPColors(); void RefreshGradientColors(); float ColorWidth( int nLength , int nWidth ); float ColorDelta( COLORREF clrA , COLORREF clrB ); float Length( COLORREF clrA , COLORREF clrB ); BOOL LongColor( COLORREF clrMain , COLORREF clrSub , BOOL bCalcLength , float fDistance ); COLORREF MixColor( COLORREF clrMain , COLORREF clrSub , float fDistance ); COLORREF AdjustColor( COLORREF clrMain , COLORREF clrSub , float fDistance ); double GetRDelta( COLORREF clr ); double GetGDelta( COLORREF clr ); double GetBDelta( COLORREF clr ); //singleton, instantiate on demand. static CSPColorManager& AFX_CDECL Instance(); public: CSPPaintManagerColorGradient grcCaption; //Caption gradient color. CSPPaintManagerColorGradient grcDockBar; //Dockbar gradient color. CSPPaintManagerColorGradient grcShortcutBarGripper; //Shortcut bar gripper. CSPPaintManagerColorGradient grcToolBar; //ToolBar gradient color. private: BOOL m_bInit; BOOL m_bDisableLunaColors; COLORREF m_arrStandardColor[XPCOLOR_LAST + 1]; COLORREF m_arrCustomColor[XPCOLOR_LAST + 1]; PFNGETSYSCOLOR m_pfnGetSysColor; SPCurrentSystemTheme m_systemTheme; friend CSPColorManager * SPColorManager(); }; CSPColorManager * SPColorManager(); //功能:获取指定的颜色。 COLORREF GetXtremeColor( UINT nIndex ); AFX_INLINE COLORREF GetXtremeColor( UINT nIndex ) { return SPColorManager()->GetColor( nIndex ); } AFX_INLINE CSPColorManager * SPColorManager() { return &CSPColorManager::Instance(); } #endif