XTPColorManager.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:38k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPColorManager.h: interface for the CXTPColorManager class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPCOLORMANAGER_H__)
  22. #define __XTPCOLORMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. //-----------------------------------------------------------------------
  28. // Summary:
  29. //     Enumeration used to determine the current Windows XP theme in use
  30. // See Also:
  31. //     CXTPColorManager::GetCurrentSystemTheme
  32. // Example:
  33. //     <code>XTPCurrentSystemTheme systemTheme = XTPColorManager()->GetCurrentSystemTheme();</code>
  34. //
  35. // <KEYWORDS xtpSystemThemeUnknown, xtpSystemThemeBlue, xtpSystemThemeOlive, xtpSystemThemeSilver, xtpSystemThemeAuto, xtpSystemThemeDefault>
  36. //-----------------------------------------------------------------------
  37. enum XTPCurrentSystemTheme
  38. {
  39. xtpSystemThemeUnknown,      // No known theme in use
  40. xtpSystemThemeBlue,         // Luna Blue Windows XP theme in use
  41. xtpSystemThemeOlive,        // Luna Olive Windows XP theme in use
  42. xtpSystemThemeSilver,       // Luna Silver Windows XP theme in use
  43. xtpSystemThemeRoyale,       // Royale Windows XP theme in use
  44. xtpSystemThemeAero,         // Aero Vista theme in use
  45. xtpSystemThemeAuto,         // Use OS theme.
  46. xtpSystemThemeDefault       // Default theme (xtpSystemThemeAuto)
  47. };
  48. //{{AFX_CODEJOCK_PRIVATE
  49. #ifndef COLOR_GRADIENTACTIVECAPTION
  50. #define COLOR_GRADIENTACTIVECAPTION           27
  51. #endif
  52. #ifndef COLOR_GRADIENTINACTIVECAPTION
  53. #define COLOR_GRADIENTINACTIVECAPTION         28
  54. #endif
  55. #define COLORREF_NULL   (COLORREF)-1
  56. //}}AFX_CODEJOCK_PRIVATE
  57. const UINT XPCOLOR_BASE                     = 30; //<ALIAS CXTPColorManager::GetColor>
  58. const UINT XPCOLOR_TOOLBAR_FACE             = XPCOLOR_BASE; //<ALIAS CXTPColorManager::GetColor>
  59. const UINT XPCOLOR_HIGHLIGHT                = 31; //<ALIAS CXTPColorManager::GetColor>
  60. const UINT XPCOLOR_HIGHLIGHT_BORDER         = 32; //<ALIAS CXTPColorManager::GetColor>
  61. const UINT XPCOLOR_HIGHLIGHT_PUSHED         = 33; //<ALIAS CXTPColorManager::GetColor>
  62. const UINT XPCOLOR_HIGHLIGHT_CHECKED        = 36; //<ALIAS CXTPColorManager::GetColor>
  63. const UINT XPCOLOR_HIGHLIGHT_CHECKED_BORDER = 37; //<ALIAS CXTPColorManager::GetColor>
  64. const UINT XPCOLOR_ICONSHADDOW              = 34; //<ALIAS CXTPColorManager::GetColor>
  65. const UINT XPCOLOR_MENUBAR_GRAYTEXT         = 35; //<ALIAS CXTPColorManager::GetColor>
  66. const UINT XPCOLOR_GRAYTEXT                 = XPCOLOR_MENUBAR_GRAYTEXT; //<ALIAS CXTPColorManager::GetColor>
  67. const UINT XPCOLOR_TOOLBAR_GRIPPER          = 38; //<ALIAS CXTPColorManager::GetColor>
  68. const UINT XPCOLOR_SEPARATOR                = 39; //<ALIAS CXTPColorManager::GetColor>
  69. const UINT XPCOLOR_DISABLED                 = 40; //<ALIAS CXTPColorManager::GetColor>
  70. const UINT XPCOLOR_MENUBAR_FACE             = 41; //<ALIAS CXTPColorManager::GetColor>
  71. const UINT XPCOLOR_MENUBAR_EXPANDED         = 42; //<ALIAS CXTPColorManager::GetColor>
  72. const UINT XPCOLOR_MENUBAR_BORDER           = 43; //<ALIAS CXTPColorManager::GetColor>
  73. const UINT XPCOLOR_MENUBAR_TEXT             = 44; //<ALIAS CXTPColorManager::GetColor>
  74. const UINT XPCOLOR_HIGHLIGHT_TEXT           = 45; //<ALIAS CXTPColorManager::GetColor>
  75. const UINT XPCOLOR_TOOLBAR_TEXT             = 46; //<ALIAS CXTPColorManager::GetColor>
  76. const UINT XPCOLOR_PUSHED_TEXT              = 47; //<ALIAS CXTPColorManager::GetColor>
  77. const UINT XPCOLOR_TAB_INACTIVE_BACK        = 48; //<ALIAS CXTPColorManager::GetColor>
  78. const UINT XPCOLOR_TAB_INACTIVE_TEXT        = 49; //<ALIAS CXTPColorManager::GetColor>
  79. const UINT XPCOLOR_HIGHLIGHT_PUSHED_BORDER  = 50; //<ALIAS CXTPColorManager::GetColor>
  80. const UINT XPCOLOR_CHECKED_TEXT             = XPCOLOR_HIGHLIGHT_TEXT; //<ALIAS CXTPColorManager::GetColor>
  81. const UINT XPCOLOR_3DFACE                   = 51; //<ALIAS CXTPColorManager::GetColor>
  82. const UINT XPCOLOR_3DSHADOW                 = 52; //<ALIAS CXTPColorManager::GetColor>
  83. const UINT XPCOLOR_EDITCTRLBORDER           = 53; //<ALIAS CXTPColorManager::GetColor>
  84. const UINT XPCOLOR_FRAME                    = 54; //<ALIAS CXTPColorManager::GetColor>
  85. const UINT XPCOLOR_SPLITTER_FACE            = 55; //<ALIAS CXTPColorManager::GetColor>
  86. const UINT XPCOLOR_LABEL                    = 56; //<ALIAS CXTPColorManager::GetColor>
  87. const UINT XPCOLOR_STATICFRAME              = 57; //<ALIAS CXTPColorManager::GetColor>
  88. const UINT XPCOLOR_HIGHLIGHT_DISABLED_BORDER = 58; //<ALIAS CXTPColorManager::GetColor>
  89. const UINT XPCOLOR_SHADOW_FACTOR            = 59; //<ALIAS CXTPColorManager::GetColor>
  90. const UINT XPCOLOR_TOOLBAR_GRAYTEXT         = 60; //<ALIAS CXTPColorManager::GetColor>
  91. const UINT XPCOLOR_FLOATBAR_BORDER          = 61; //<ALIAS CXTPColorManager::GetColor>
  92. const UINT XPCOLOR_LAST                     = 62; //<ALIAS CXTPColorManager::GetColor>
  93. //===========================================================================
  94. // Summary:
  95. //     The CXTPPaintManagerColor class is used to manage COLORREF values for
  96. //     determining default and application defined colors.
  97. //===========================================================================
  98. class _XTP_EXT_CLASS CXTPPaintManagerColor
  99. {
  100. public:
  101. //-----------------------------------------------------------------------
  102. // Summary:
  103. //     Constructs a CXTPPaintManagerColor object and initializes default
  104. //     and application defined colors for the class
  105. // Parameters:
  106. //     clr - n RGB value that represents default color to set.
  107. // See Also:
  108. //     SetStandardValue, SetCustomValue
  109. //-----------------------------------------------------------------------
  110. CXTPPaintManagerColor();
  111. CXTPPaintManagerColor(COLORREF clr); // <combine CXTPPaintManagerColor::CXTPPaintManagerColor>
  112. //-----------------------------------------------------------------------
  113. // Summary:
  114. //     This member function determines if application defined colors are
  115. //     used.
  116. // Returns:
  117. //     TRUE if application defined colors are used, otherwise FALSE.
  118. //-----------------------------------------------------------------------
  119. BOOL IsDefaultValue() const;
  120. //-----------------------------------------------------------------------
  121. // Summary:
  122. //     This member function determines if the standard color is set and
  123. //     used.
  124. // Returns:
  125. //     TRUE if standard color is set and custom color is not set,
  126. //     otherwise FALSE.
  127. //-----------------------------------------------------------------------
  128. BOOL IsStandardValue() const;
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     This member function determines if the custom color is set and
  132. //     used.
  133. // Returns:
  134. //     TRUE if custom color is set, otherwise FALSE.
  135. //-----------------------------------------------------------------------
  136. BOOL IsCustomValue() const;
  137. //-----------------------------------------------------------------------
  138. // Summary:
  139. //     This member function will retrieves the default color for the
  140. //     CXTPPaintManagerColor class.
  141. // Returns:
  142. //     An RGB value that represents the default color.
  143. //-----------------------------------------------------------------------
  144. COLORREF GetStandardColor() const;
  145. //-----------------------------------------------------------------------
  146. // Summary:
  147. //     This member function will sets the application defined color for
  148. //     the CXTPPaintManagerColor class.
  149. // Parameters:
  150. //     clr - n RGB value that represents application defined color to set.
  151. //-----------------------------------------------------------------------
  152. void SetCustomValue(COLORREF clr);
  153. //-----------------------------------------------------------------------
  154. // Summary:
  155. //     This member function will sets the default color for
  156. //     the CXTPPaintManagerColor class.
  157. // Parameters:
  158. //     clr - n RGB value that represents default color to set.
  159. //-----------------------------------------------------------------------
  160. void SetStandardValue(COLORREF clr);
  161. //-----------------------------------------------------------------------
  162. // Summary:
  163. //     This member function will remove the application defined color (if any)
  164. //     that was defined for the CXTPPaintManagerColor class.
  165. //-----------------------------------------------------------------------
  166. void SetDefaultValue();
  167. //-----------------------------------------------------------------------
  168. // Summary:
  169. //     Operator used to retrieve an RGB color value that represents
  170. //     the current color defined for the CXTPPaintManagerColor class.
  171. // Returns:
  172. //     An RGB value that represents the current color.
  173. //-----------------------------------------------------------------------
  174. operator COLORREF() const;
  175. //-----------------------------------------------------------------------
  176. // Summary:
  177. //     This operator assigns a new COLORREF value for the application defined color
  178. // Parameters:
  179. //     clr    - RGB value that represents application defined color to set.
  180. //     refclr - Reference to CXTPPaintManagerColor value that represents application defined color to set.
  181. // See Also:
  182. //     SetStandardValue, SetCustomValue
  183. //-----------------------------------------------------------------------
  184. const CXTPPaintManagerColor& operator=(COLORREF clr);
  185. const CXTPPaintManagerColor& operator=(const CXTPPaintManagerColor& refclr); // <combine CXTPPaintManagerColor::=@COLORREF>
  186. //-----------------------------------------------------------------------
  187. // Summary:
  188. //     This method reads or writes data from or to an archive.
  189. // Parameters:
  190. //     ar - A CArchive object to serialize to or from.
  191. //-----------------------------------------------------------------------
  192. virtual void Serialize(CArchive& ar);
  193. protected:
  194. COLORREF m_clrStandardValue;   // Standard color
  195. COLORREF m_clrCustomValue;     // Application defined color
  196. };
  197. //---------------------------------------------------------------------------
  198. AFX_INLINE BOOL CXTPPaintManagerColor::IsDefaultValue() const {
  199. return (m_clrCustomValue == COLORREF_NULL) && (m_clrStandardValue == COLORREF_NULL);
  200. }
  201. AFX_INLINE BOOL CXTPPaintManagerColor::IsStandardValue() const {
  202. return (m_clrCustomValue == COLORREF_NULL) && (m_clrStandardValue != COLORREF_NULL);
  203. }
  204. AFX_INLINE BOOL CXTPPaintManagerColor::IsCustomValue() const {
  205. return m_clrCustomValue != COLORREF_NULL;
  206. }
  207. AFX_INLINE COLORREF CXTPPaintManagerColor::GetStandardColor() const {
  208. return m_clrStandardValue;
  209. }
  210. AFX_INLINE void CXTPPaintManagerColor::SetCustomValue(COLORREF clr) {
  211. m_clrCustomValue = clr;
  212. }
  213. AFX_INLINE void CXTPPaintManagerColor::SetStandardValue(COLORREF clr) {
  214. m_clrStandardValue = clr;
  215. }
  216. AFX_INLINE void CXTPPaintManagerColor::SetDefaultValue() {
  217. m_clrCustomValue = COLORREF_NULL;
  218. }
  219. AFX_INLINE CXTPPaintManagerColor::operator COLORREF() const{
  220. return  (m_clrCustomValue == COLORREF_NULL) ? m_clrStandardValue : m_clrCustomValue;
  221. }
  222. AFX_INLINE const CXTPPaintManagerColor& CXTPPaintManagerColor::operator=(COLORREF clr) {
  223. SetCustomValue(clr); return *this;
  224. }
  225. AFX_INLINE const CXTPPaintManagerColor& CXTPPaintManagerColor::operator=(const CXTPPaintManagerColor& clr) {
  226. m_clrCustomValue = clr.m_clrCustomValue;
  227. m_clrStandardValue = clr.m_clrStandardValue;
  228. return *this;
  229. }
  230. //===========================================================================
  231. // Summary:
  232. //     The CXTPPaintManagerColorGradient class is used to manage COLORREF values
  233. //     for determining light and dark gradient colors.
  234. // See Also: CXTPPaintManagerColor
  235. //===========================================================================
  236. class _XTP_EXT_CLASS CXTPPaintManagerColorGradient
  237. {
  238. public:
  239. //-----------------------------------------------------------------------
  240. // Summary:
  241. //     Constructs a CXTPPaintManagerColorGradient object and initializes
  242. //     default dark and light colors equal to the specified COLORREF value.
  243. // Parameters:
  244. //     clr - An RGB COLORREF value representing the dark and light colors.
  245. //     clrLight - An RGB COLORREF value representing the light color.
  246. //     clrDark - An RGB COLORREF value representing the dark color.
  247. // See Also:
  248. //     SetStandardValue, SetCustomValue
  249. //-----------------------------------------------------------------------
  250. CXTPPaintManagerColorGradient();
  251. CXTPPaintManagerColorGradient(const COLORREF clr); // <combine CXTPPaintManagerColorGradient::CXTPPaintManagerColorGradient>
  252. CXTPPaintManagerColorGradient(const CXTPPaintManagerColor clr); // <combine CXTPPaintManagerColorGradient::CXTPPaintManagerColorGradient>
  253. CXTPPaintManagerColorGradient(COLORREF clrLight, COLORREF clrDark); // <combine CXTPPaintManagerColorGradient::CXTPPaintManagerColorGradient>
  254. //-----------------------------------------------------------------------
  255. // Summary:
  256. //     This member function sets the value of the default
  257. //     dark and light colors equal to the specified COLORREF value.
  258. // Parameters:
  259. //     clr      - An RGB COLORREF value representing the dark and light colors.
  260. //     clrref   - An reference to  CXTPPaintManagerColorGradient value
  261. //                representing the dark and light colors.
  262. //     clrLight - An RGB COLORREF value representing the light color.
  263. //     clrDark  - An RGB COLORREF value representing the dark color.
  264. //     fGradientFactor - Gradient divider factor
  265. //-----------------------------------------------------------------------
  266. void SetStandardValue(const COLORREF clr);
  267. void SetStandardValue(CXTPPaintManagerColorGradient& clrref); // <combine CXTPPaintManagerColorGradient::SetStandardValue@const COLORREF>
  268. void SetStandardValue(COLORREF clrLight, COLORREF clrDark, float fGradientFactor = 0.5f); // <combine CXTPPaintManagerColorGradient::SetStandardValue@const COLORREF>
  269. //-----------------------------------------------------------------------
  270. // Summary:
  271. //     This member function will sets the application defined 4 color gradient values for
  272. //     the CXTPPaintManagerColorGradient class.
  273. // Parameters:
  274. //     clr      - An RGB COLORREF value representing the dark and light colors.
  275. //     clrref   - An reference to  CXTPPaintManagerColorGradient value
  276. //                representing the dark and light colors.
  277. //     clrLight - An RGB COLORREF value representing the light color.
  278. //     clrDark  - An RGB COLORREF value representing the dark color.
  279. //-----------------------------------------------------------------------
  280. void SetCustomValue(const COLORREF clr);
  281. void SetCustomValue(CXTPPaintManagerColorGradient& clrref); // <combine CXTPPaintManagerColorGradient::SetCustomValue@const COLORREF>
  282. void SetCustomValue(COLORREF clrLight, COLORREF clrDark); // <combine CXTPPaintManagerColorGradient::SetCustomValue@const COLORREF>
  283. //-----------------------------------------------------------------------
  284. // Summary:
  285. //     Operator used to retrieve an RGB color value that represents
  286. //     the dark gradient color used for the CXTPPaintManagerColorGradient class.
  287. // Returns:
  288. //     An RGB value that represents the dark gradient color.
  289. //-----------------------------------------------------------------------
  290. operator COLORREF () const;
  291. //-----------------------------------------------------------------------
  292. // Summary:
  293. //     Retrieves a reference to the CXTPPaintManagerColor dark gradient color
  294. //     member.
  295. // Returns:
  296. //     A reference to the CXTPPaintManagerColor dark gradient color used
  297. //     for the CXTPPaintManagerColorGradient class.
  298. //-----------------------------------------------------------------------
  299. operator CXTPPaintManagerColor& ();
  300. //-----------------------------------------------------------------------
  301. // Summary:
  302. //     This operator copy all values from the specified source object;
  303. // Parameters:  //
  304. //     refSrc - Reference to CXTPPaintManagerColorGradient source object.
  305. // See Also:
  306. //     SetStandardValue, SetCustomValue
  307. //-----------------------------------------------------------------------
  308. const CXTPPaintManagerColorGradient& operator=(const CXTPPaintManagerColorGradient& refSrc);
  309. //-----------------------------------------------------------------------
  310. // Summary:
  311. //     Determines if the CXTPPaintManagerColorGradient object's colors
  312. //     have been initialized.
  313. // Returns:
  314. //     TRUE if both light and dark gradient colors have not been initialized,
  315. //     otherwise FALSE.
  316. //-----------------------------------------------------------------------
  317. BOOL IsNull() const;
  318. //-----------------------------------------------------------------------
  319. // Summary:
  320. //     This method reads or writes data from or to an archive.
  321. // Parameters:
  322. //     ar - A CArchive object to serialize to or from.
  323. //-----------------------------------------------------------------------
  324. virtual void Serialize(CArchive& ar);
  325. public:
  326. CXTPPaintManagerColor clrLight;     // Light color.
  327. CXTPPaintManagerColor clrDark;      // Dark color.
  328. float fGradientFactor;              // Gradient divider factor
  329. };
  330. //---------------------------------------------------------------------------
  331. AFX_INLINE CXTPPaintManagerColorGradient::operator COLORREF () const {
  332. return clrDark;
  333. }
  334. AFX_INLINE CXTPPaintManagerColorGradient::operator CXTPPaintManagerColor& () {
  335. return clrDark;
  336. }
  337. AFX_INLINE BOOL CXTPPaintManagerColorGradient::IsNull() const {
  338. return ((clrDark == COLORREF_NULL) && (clrLight == COLORREF_NULL));
  339. }
  340. AFX_INLINE const CXTPPaintManagerColorGradient& CXTPPaintManagerColorGradient::operator=(const CXTPPaintManagerColorGradient& refSrc) {
  341. clrLight = refSrc.clrLight;
  342. clrDark = refSrc.clrDark;
  343. fGradientFactor = refSrc.fGradientFactor;
  344. return *this;
  345. }
  346. //===========================================================================
  347. // Summary:
  348. //     CXTPColorManager is a stand alone class. This object is used for manipulation of
  349. //     RGB values.
  350. // See Also: XTPColorManager
  351. //===========================================================================
  352. class _XTP_EXT_CLASS CXTPColorManager : public CXTPCmdTarget
  353. {
  354. public:
  355. //-----------------------------------------------------------------------
  356. // Summary:
  357. //     Application-defined callback function used with the SetGetSysColorPtr function.
  358. // See Also: SetGetSysColorPtr
  359. //-----------------------------------------------------------------------
  360. typedef DWORD (__stdcall* PFNGETSYSCOLOR)(int nIndex);
  361. public:
  362. //-----------------------------------------------------------------------
  363. // Summary:
  364. //     This function will refresh the display element colors defined
  365. //     in the CXTPColorManager object.
  366. //-----------------------------------------------------------------------
  367. void RefreshColors();
  368. //-----------------------------------------------------------------------
  369. // Summary:
  370. //     Retrieves the current color of the specified XP display element.
  371. // Parameters:
  372. //     nIndex - Specifies the display element whose color is to be
  373. //              retrieved.  This parameter can be one of the
  374. //              following values displayed in the table below:
  375. // Remarks:
  376. //     Display elements are the parts of a window
  377. //     and the display that appear on the system display screen.
  378. //     The function returns the red, green, blue (RGB) color value
  379. //     of the given element.  To provide a consistent look to all
  380. //     Windows applications, the operating system provides and
  381. //     maintains global settings that define the colors of various
  382. //     aspects of the display. These settings as a group are sometimes
  383. //     referred to as a "color scheme." To view the current color
  384. //     settings, click Control Panel, double-click the Display icon,
  385. //     and then click the "Appearance" tab.
  386. //<TABLE>
  387. //  <b>Constant</b>                   <b>Value</b>  <b>Description</b>
  388. //  --------------------------------  ============  ------------------------------------------------------------
  389. //  COLOR_SCROLLBAR                   0             Scroll bar color
  390. //  COLOR_BACKGROUND                  1             Desktop color
  391. //  COLOR_ACTIVECAPTION               2             Color of the title bar for the active window, Specifies the left side color in the color gradient of an active window's title bar if the gradient effect is enabled.
  392. //  COLOR_INACTIVECAPTION             3             Color of the title bar for the inactive window, Specifies the left side color in the color gradient of an inactive window's title bar if the gradient effect is enabled.
  393. //  COLOR_MENU                        4             Menu background color
  394. //  COLOR_WINDOW                      5             Window background color
  395. //  COLOR_WINDOWFRAME                 6             Window frame color
  396. //  COLOR_MENUTEXT                    7             Color of text on menus
  397. //  COLOR_WINDOWTEXT                  8             Color of text in windows
  398. //  COLOR_CAPTIONTEXT                 9             Color of text in caption, size box, and scroll arrow
  399. //  COLOR_ACTIVEBORDER                10            Border color of active window
  400. //  COLOR_INACTIVEBORDER              11            Border color of inactive window
  401. //  COLOR_APPWORKSPACE                12            Background color of multiple-document interface (MDI) applications
  402. //  COLOR_HIGHLIGHT                   13            Background color of items selected in a control
  403. //  COLOR_HIGHLIGHTTEXT               14            Text color of items selected in a control
  404. //  COLOR_BTNFACE                     15            Face color for three-dimensional display elements and for dialog box backgrounds.
  405. //  COLOR_BTNSHADOW                   16            Color of shading on the edge of command buttons
  406. //  COLOR_GRAYTEXT                    17            Grayed (disabled) text
  407. //  COLOR_BTNTEXT                     18            Text color on push buttons
  408. //  COLOR_INACTIVECAPTIONTEXT         19            Color of text in an inactive caption
  409. //  COLOR_BTNHIGHLIGHT                20            Highlight color for 3-D display elements
  410. //  COLOR_3DDKSHADOW                  21            Darkest shadow color for 3-D display elements
  411. //  COLOR_3DLIGHT                     22            Second lightest 3-D color after 3DHighlight, Light color for three-dimensional display elements (for edges facing the light source.)
  412. //  COLOR_INFOTEXT                    23            Color of text in ToolTips
  413. //  COLOR_INFOBK                      24            Background color of ToolTips
  414. //  COLOR_HOTLIGHT                    26            Color for a hot-tracked item. Single clicking a hot-tracked item executes the item.
  415. //  COLOR_GRADIENTACTIVECAPTION       27            Right side color in the color gradient of an active window's title bar. COLOR_ACTIVECAPTION specifies the left side color.
  416. //  COLOR_GRADIENTINACTIVECAPTION     28            Right side color in the color gradient of an inactive window's title bar. COLOR_INACTIVECAPTION specifies the left side color.
  417. //  XPCOLOR_TOOLBAR_FACE              30            XP toolbar background color.
  418. //  XPCOLOR_HIGHLIGHT                 31            XP menu item selected color.
  419. //  XPCOLOR_HIGHLIGHT_BORDER          32            XP menu item selected border color.
  420. //  XPCOLOR_HIGHLIGHT_PUSHED          33            XP menu item pushed color.
  421. //  XPCOLOR_HIGHLIGHT_CHECKED         36            XP menu item checked color.
  422. //  XPCOLOR_HIGHLIGHT_CHECKED_BORDER  37            An RGB value that represents the XP menu item checked border color.
  423. //  XPCOLOR_ICONSHADDOW               34            XP menu item icon shadow.
  424. //  XPCOLOR_GRAYTEXT                  35            XP menu item disabled text color.
  425. //  XPCOLOR_TOOLBAR_GRIPPER           38            XP toolbar gripper color.
  426. //  XPCOLOR_SEPARATOR                 39            XP toolbar separator color.
  427. //  XPCOLOR_DISABLED                  40            XP menu icon disabled color.
  428. //  XPCOLOR_MENUBAR_FACE              41            XP menu item57- text background color.
  429. //  XPCOLOR_MENUBAR_EXPANDED          42            XP hidden menu commands background color.
  430. //  XPCOLOR_MENUBAR_BORDER            43            XP menu border color.
  431. //  XPCOLOR_MENUBAR_TEXT              44            XP menu item text color.
  432. //  XPCOLOR_HIGHLIGHT_TEXT            45            XP menu item selected text color.
  433. //  XPCOLOR_TOOLBAR_TEXT              46            XP toolbar text color.
  434. //  XPCOLOR_PUSHED_TEXT               47            XP toolbar pushed text color.
  435. //  XPCOLOR_TAB_INACTIVE_BACK         48            XP inactive tab background color.
  436. //  XPCOLOR_TAB_INACTIVE_TEXT         49            XP inactive tab text color.
  437. //  XPCOLOR_HIGHLIGHT_PUSHED_BORDER   50            An RGB value that represents the XP border color for pushed in 3D elements.
  438. //  XPCOLOR_CHECKED_TEXT              45            XP color for text displayed in a checked button.
  439. //  XPCOLOR_3DFACE                    51            XP face color for three- dimensional display elements and for dialog box backgrounds.
  440. //  XPCOLOR_3DSHADOW                  52            XP shadow color for three-dimensional display elements (for edges facing away from the light source).
  441. //  XPCOLOR_EDITCTRLBORDER            53            XP color for the border color of edit controls.
  442. //  XPCOLOR_FRAME                     54            Office 2003 frame color.
  443. //  XPCOLOR_SPLITTER_FACE             55            XP splitter face color.
  444. //  XPCOLOR_LABEL                     56            Color for label control (xtpControlLabel)
  445. //  XPCOLOR_STATICFRAME               57            WinXP Static frame color
  446. //</TABLE>
  447. // Returns:
  448. //     The red, green, blue (RGB) color value of the given element.
  449. //-----------------------------------------------------------------------
  450. COLORREF GetColor(int nIndex) const;
  451. //-----------------------------------------------------------------------
  452. // Summary:
  453. //      Call this member function to get the Luna color specified by nIndes.
  454. // Parameters:
  455. //     nIndex - Specifies the display element whose color is to be
  456. //              retrieved.
  457. // Returns:
  458. //      An RGB color value representing the Luna color.
  459. //-----------------------------------------------------------------------
  460. COLORREF GetLunaColor(int nIndex) const;
  461. //-----------------------------------------------------------------------
  462. // Summary:
  463. //     Call this member function to blend the light and dark colors
  464. //     by the amount specified in nDelta.
  465. // Parameters:
  466. //     clrLight - RGB light color
  467. //     clrDark  - RGB dark color
  468. //     nDelta   - Amount saturation to blend colors.
  469. // Returns:
  470. //     An RGB color value representing the two blended colors.
  471. //-----------------------------------------------------------------------
  472. COLORREF LightColor(COLORREF clrLight, COLORREF clrDark, int nDelta) const;
  473. //-----------------------------------------------------------------------
  474. // Summary:
  475. //     Call this member function to disable the luna (Blue, Olive
  476. //     and Green) colors for Office 2003 theme for Windows XP and
  477. //     later operating systems.
  478. // Parameters:
  479. //     bDisable - TRUE to disable luna colors, otherwise FALSE.
  480. //-----------------------------------------------------------------------
  481. void DisableLunaColors(BOOL bDisable = TRUE);
  482. //-----------------------------------------------------------------------
  483. // Summary:
  484. //     Determines if Luna colors for Office 2003 style is disabled.
  485. // Returns:
  486. //     TRUE if the luna colors are disabled, otherwise FALSE.
  487. //-----------------------------------------------------------------------
  488. BOOL IsLunaColorsDisabled() const;
  489. //-----------------------------------------------------------------------
  490. // Summary:
  491. //     Call this member to set the color for the specified index.
  492. //     See GetColor for a complete list of index values.
  493. // Parameters:
  494. //     nIndex - Color index.
  495. //     clrValue - RGB color value to set.
  496. // See Also: SetColors
  497. //-----------------------------------------------------------------------
  498. void SetColor(int nIndex, COLORREF clrValue);
  499. //-----------------------------------------------------------------------
  500. // Summary:
  501. //     Call this member to set the colors for each element to the
  502. //     color in the specified color array.
  503. // Parameters:
  504. //     cElements    - Number of elements in array.
  505. //     lpaElements  - Array of elements.
  506. //     lpaRgbValues - Array of RGB values.
  507. // See Also: SetColor
  508. //-----------------------------------------------------------------------
  509. void SetColors(int cElements, const int* lpaElements, const COLORREF* lpaRgbValues);
  510. //-----------------------------------------------------------------------
  511. // Summary:
  512. //     Call this member to set the Office 2003 Luna colors for each element to correspond with
  513. //     the current Windows XP visual style.
  514. // See Also: SetColor, SetColors
  515. //-----------------------------------------------------------------------
  516. void RefreshLunaColors();
  517. //-----------------------------------------------------------------------
  518. // Summary:
  519. //     Call this member function to determine the current Windows XP
  520. //     theme in use.
  521. // Returns:
  522. //     A XTPCurrentSystemTheme enumeration that represents the
  523. //     current Windows theme in use, can be one of the following
  524. //     values:
  525. //     * <b>xtpSystemThemeUnknown</b> Indicates no known theme in use
  526. //     * <b>xtpSystemThemeBlue</b> Indicates blue theme in use
  527. //     * <b>xtpSystemThemeOlive</b> Indicates olive theme in use
  528. //     * <b>xtpSystemThemeSilver</b> Indicates silver theme in use
  529. // See Also: SetLunaTheme, RefreshLunaColors
  530. //-----------------------------------------------------------------------
  531. XTPCurrentSystemTheme GetCurrentSystemTheme() const;
  532. //-----------------------------------------------------------------------
  533. // Summary:
  534. //     Call this member function to determine the current Windows XP
  535. //     theme in use.
  536. // Returns:
  537. //     A XTPCurrentSystemTheme enumeration that represents the
  538. //     current Windows theme in use, can be one of the following
  539. //     values:
  540. //     * <b>xtpSystemThemeUnknown</b> Indicates no known theme in use
  541. //     * <b>xtpSystemThemeBlue</b> Indicates blue theme in use
  542. //     * <b>xtpSystemThemeOlive</b> Indicates olive theme in use
  543. //     * <b>xtpSystemThemeSilver</b> Indicates silver theme in use
  544. //-----------------------------------------------------------------------
  545. XTPCurrentSystemTheme GetWinThemeWrapperTheme() const;
  546. //-----------------------------------------------------------------------
  547. // Summary:
  548. //     Call this method to force system theme.
  549. // Parameters:
  550. //     systemTheme - theme to use. Can be any of the values listed in the Remarks section.
  551. // Remarks:
  552. //     theme can be one of the following:
  553. //     * <b>xtpSystemThemeUnknown</b> Disables <i>luna</i> theme support.
  554. //     * <b>xtpSystemThemeBlue</b> Enables blue theme
  555. //     * <b>xtpSystemThemeOlive</b> Enables olive theme
  556. //     * <b>xtpSystemThemeSilver</b> Enables silver theme
  557. //-----------------------------------------------------------------------
  558. void SetLunaTheme(XTPCurrentSystemTheme systemTheme);
  559. //-----------------------------------------------------------------------
  560. // Summary:
  561. //     This method replace standard GetSysColor to application defined.
  562. // Parameters:
  563. //     pfnGetSysColor - Pointer to the PFNGETSYSCOLOR procedure
  564. //-----------------------------------------------------------------------
  565. void SetGetSysColorPtr(PFNGETSYSCOLOR pfnGetSysColor);
  566. //-----------------------------------------------------------------------
  567. // Summary:
  568. //     Call this member function to determine if the system display
  569. //     is set to low resolution.
  570. // Parameters:
  571. //     hDC - Handle to a device context, if NULL the desktop window
  572. //           device context is used.
  573. // Returns:
  574. //     TRUE if the system display is set to low resolution,
  575. //     otherwise FALSE.
  576. //-----------------------------------------------------------------------
  577. BOOL IsLowResolution(HDC hDC = 0);
  578. public:
  579. BOOL LongColor(COLORREF clrMain, COLORREF clrSub, BOOL bCalcLength, float fDistance);
  580. private:
  581. CXTPColorManager();
  582. void RefreshSysColors();
  583. void RefreshXPColors();
  584. void RefreshGradientColors();
  585. float ColorWidth(int nLength, int nWidth);
  586. float ColorDelta(COLORREF clrA, COLORREF clrB);
  587. float Length(COLORREF clrA, COLORREF clrB);
  588. COLORREF MixColor(COLORREF clrMain, COLORREF clrSub, float fDistance);
  589. COLORREF AdjustColor(COLORREF clrMain, COLORREF clrSub, float fDistance);
  590. double GetRDelta(COLORREF clr);
  591. double GetGDelta(COLORREF clr);
  592. double GetBDelta(COLORREF clr);
  593. XTPCurrentSystemTheme _GetWinThemeWrapperTheme();
  594. // singleton, instantiate on demand.
  595. static CXTPColorManager& AFX_CDECL Instance();
  596. public:
  597. CXTPPaintManagerColorGradient grcCaption;            // Office 2003 Caption gradient color.
  598. CXTPPaintManagerColorGradient grcDockBar;            // Office 2003 Dockbar gradient color.
  599. CXTPPaintManagerColorGradient grcShortcutBarGripper; // Office 2003 Shortcut bar gripper.
  600. CXTPPaintManagerColorGradient grcToolBar;            // Office 2003 ToolBar gradient color.
  601. CXTPPaintManagerColorGradient grcMenu;               // Office 2003 Menu sidebar gradient color.
  602. CXTPPaintManagerColorGradient grcMenuExpanded;       // Office 2003 Expanded menu sidebar gradient color.
  603. CXTPPaintManagerColorGradient grcMenuItemPopup;      // Office 2003 Menu item popup gradient color.
  604. CXTPPaintManagerColorGradient grcLunaChecked;        // Office 2003 checked button gradient color.
  605. CXTPPaintManagerColorGradient grcLunaPushed;         // Office 2003 pushed button gradient color.
  606. CXTPPaintManagerColorGradient grcLunaSelected;       // Office 2003 selected button gradient color.
  607. BOOL m_bEnableLunaBlueForRoyaleTheme;                // TRUE if Office2003 blue theme will be used for xtpSystemThemeRoyale
  608. BOOL m_bEnableLunaBlueForAeroTheme;                  // TRUE if Office2003 blue theme will be used for xtpSystemThemeAero
  609. private:
  610. BOOL m_bDisableLunaColors;
  611. COLORREF m_arrStandardColor[XPCOLOR_LAST + 1];
  612. COLORREF m_arrCustomColor[XPCOLOR_LAST + 1];
  613. COLORREF m_arrLunaColor[XPCOLOR_LAST + 1];
  614. PFNGETSYSCOLOR m_pfnGetSysColor;
  615. XTPCurrentSystemTheme m_systemTheme;
  616. XTPCurrentSystemTheme m_winThemeWrapperTheme;
  617. friend CXTPColorManager* XTPColorManager();
  618. };
  619. //---------------------------------------------------------------------------
  620. // Summary:
  621. //     Call this function to access CXTPColorManager members.
  622. //     Since this class is designed as a single instance object you can
  623. //     only access version info through this method. You <b>cannot</b>
  624. //     directly instantiate an object of type CXTPColorManager.
  625. // Example:
  626. // <code>
  627. // COLORREF cr = XTPColorManager()->GetColor(nIndex);
  628. // </code>
  629. //---------------------------------------------------------------------------
  630. CXTPColorManager* XTPColorManager();
  631. //---------------------------------------------------------------------------
  632. // Summary:
  633. //     Call this member as a convenient way to call
  634. //     XTPColorManager()->GetColor, see CXTPColorManager::GetColor for
  635. //     more details.
  636. // Parameters:
  637. //     nIndex - Specifies the display element whose color is to be
  638. //              retrieved.
  639. // Returns:
  640. //     The red, green, blue (RGB) color value of the given element.
  641. // Example:
  642. // <code>
  643. // if (eState == xtMouseNormal)
  644. // {
  645. //     pDC->Draw3dRect(rcItem,
  646. //         GetXtremeColor(COLOR_3DFACE),
  647. //         GetXtremeColor(COLOR_3DFACE));
  648. // }
  649. // </code>
  650. // See Also:
  651. //     CXTPColorManager::GetColor
  652. //---------------------------------------------------------------------------
  653. COLORREF GetXtremeColor(UINT nIndex);
  654. //-----------------------------------------------------------------------
  655. // Summary:
  656. //      Call this function to get the MS Office color represented by nIndex.
  657. // Parameters:
  658. //     nIndex - Specifies the display element whose color is to be
  659. //              retrieved.
  660. // Returns:
  661. //      An RGB color value representing the color value of the MS Office color.
  662. // Example:
  663. // <code>
  664. // switch (XTPColorManager()->GetCurrentSystemTheme())
  665. // {
  666. //      case xtpSystemThemeBlue:
  667. //      case xtpSystemThemeOlive:
  668. //      case xtpSystemThemeSilver:
  669. //           m_clr3DFacePushed.SetStandardValue(GetMSO2003Color(XPCOLOR_HIGHLIGHT_PUSHED));
  670. //           m_clr3DFaceHilite.SetStandardValue(GetMSO2003Color(XPCOLOR_HIGHLIGHT));
  671. //           m_clrBtnTextPushed.SetStandardValue(GetMSO2003Color(XPCOLOR_PUSHED_TEXT));
  672. //           m_clrBtnTextHilite.SetStandardValue(GetMSO2003Color(XPCOLOR_HIGHLIGHT_TEXT));
  673. //           m_clrBorder3DShadow.SetStandardValue(GetMSO2003Color(XPCOLOR_HIGHLIGHT_BORDER));
  674. //           m_clrBorder3DHilite.SetStandardValue(GetMSO2003Color(XPCOLOR_HIGHLIGHT_BORDER));
  675. //           break;
  676. // }
  677. // </code>
  678. // See Also:
  679. //      CXTPColorManager::GetColor
  680. //-----------------------------------------------------------------------
  681. COLORREF GetMSO2003Color(UINT nIndex);
  682. /////////////////////////////////////////////////////////////////////////////
  683. AFX_INLINE CXTPColorManager* XTPColorManager() {
  684. return &CXTPColorManager::Instance();
  685. }
  686. AFX_INLINE COLORREF GetXtremeColor(UINT nIndex) {
  687. return XTPColorManager()->GetColor(nIndex);
  688. }
  689. AFX_INLINE COLORREF GetMSO2003Color(UINT nIndex) {
  690. return XTPColorManager()->GetLunaColor(nIndex);
  691. }
  692. //-----------------------------------------------------------------------
  693. // Summary:
  694. //     This global function will refresh the display element
  695. //     colors defined in the CXTPColorManager class.
  696. // See Also:
  697. //     CXTPColorManager::RefreshColors
  698. //-----------------------------------------------------------------------
  699. _XTP_EXT_CLASS void AFX_CDECL RefreshXtremeColors();
  700. #endif // !defined(__XTPCOLORMANAGER_H__)