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

对话框与窗口

开发平台:

Visual C++

  1. // XTPTabPaintManager.h: interface for the CXTPTabPaintManager 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(__XTPTABPAINTMANAGER_H__)
  22. #define __XTPTABPAINTMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPTabManager;
  28. class CXTPTabManagerAtom;
  29. class CXTPTabManagerItem;
  30. class CXTPTabManagerNavigateButton;
  31. #include "Common/XTPColorManager.h"
  32. #include "Common/XTPWinThemeWrapper.h"
  33. //-----------------------------------------------------------------------
  34. // Summary:
  35. //     Indicates that a transparent color should be used.
  36. // Remarks:
  37. //     If an objects COLORREF value is XTP_TABMANAGER_COLOR_NONE it
  38. //     is used to indicate that the object should not be drawn.  This
  39. //     is used in the tab appearance and color functions to indicate
  40. //     when tab borders, highlighting, shadowing, etc should be drawn.
  41. //
  42. //      Setting a member of CXTPTabPaintManager::CColorSet to
  43. //      XTP_TABMANAGER_COLOR_NONE will indicate that the member should
  44. //      not be drawn.
  45. // See Also: CXTPTabPaintManager::CColorSet
  46. //-----------------------------------------------------------------------
  47. const COLORREF XTP_TABMANAGER_COLOR_NONE = (COLORREF)(-1);
  48. //-----------------------------------------------------------------------
  49. // Summary:
  50. //     Indicates a special "shaded" fill type.
  51. // Remarks:
  52. //     To get the "shaded" effect, the object will be filled with
  53. //     one pixel COLOR_3DFACE, one pixel COLOR_3DHIGHLIGHT, one
  54. //     pixel COLOR_3DFACE....
  55. //
  56. //           Setting the clrLight parameter to XTP_TABMANAGER_COLOR_SHADED
  57. //           in the used in CXTPTabPaintManager::CColorSet::GradientFill
  58. //           member will cause the object to be filled with the special shaded fill.
  59. //
  60. // NOTE:
  61. //     This is used in xtpTabAppearanceStateButtons to colorize
  62. //     the button face.  The special fill was used to color of the currently
  63. //     selected tab.  The special fill can be applied to any
  64. //     color member.
  65. // See Also: CXTPTabPaintManager::CColorSet::GradientFill
  66. //-----------------------------------------------------------------------
  67. const COLORREF XTP_TABMANAGER_COLOR_SHADED = (COLORREF)(-2);
  68. //-----------------------------------------------------------------------
  69. // Summary:
  70. //     XTPTabOneNoteColor is an enumeration used to indicate which OneNote
  71. //     COLORREF value to retrieve.
  72. // Remarks:
  73. //     This enumerator is used by CXTPTabPaintManager::GetOneNoteColor to
  74. //     retrieve a specified OneNote RGB color value.
  75. // Example:
  76. //      See WM_XTP_GETTABCOLOR for an example.
  77. // See Also:
  78. //     CXTPTabPaintManager::GetOneNoteColor, CXTPTabManager::GetItemColor,
  79. //     CXTPDockingPane::GetItemColor
  80. //
  81. // <KEYWORDS xtpTabColorBlue, xtpTabColorYellow, xtpTabColorGreen, xtpTabColorRed, xtpTabColorPurple, xtpTabColorCyan, xtpTabColorOrange, xtpTabColorMagenta>
  82. //-----------------------------------------------------------------------
  83. enum XTPTabOneNoteColor
  84. {
  85. xtpTabColorBlue    = 0x1000000, // Blue tab color used when OneNote colors enabled.
  86. xtpTabColorYellow  = 0x1000001, // Yellow tab color used when OneNote colors enabled.
  87. xtpTabColorGreen   = 0x1000002, // Green tab color used when OneNote colors enabled.
  88. xtpTabColorRed     = 0x1000003, // Red tab color used when OneNote colors enabled.
  89. xtpTabColorPurple  = 0x1000004, // Purple tab color used when OneNote colors enabled.
  90. xtpTabColorCyan    = 0x1000005, // Cyan tab color used when OneNote colors enabled.
  91. xtpTabColorOrange  = 0x1000006, // Orange tab color used when OneNote colors enabled.
  92. xtpTabColorMagenta = 0x1000007  // Magenta tab color used when OneNote colors enabled.
  93. };
  94. //-----------------------------------------------------------------------
  95. // Summary:
  96. //     XTPTabWorkspacePart is an enumeration used to indicate which
  97. //     part of the MDI TabWorkspace needs to be redrawn.
  98. // Remarks:
  99. //     The enumerators are used by CXTPTabPaintManager::CAppearanceSet::DrawWorkspacePart
  100. //     when redrawing the MDITabClient TabWorkspace when grouping is enabled.
  101. // See Also: CXTPTabPaintManager::CAppearanceSet::DrawWorkspacePart
  102. //
  103. // <KEYWORDS xtpTabWorkspacePartBorder, xtpTabWorkspacePartWidth, xtpTabWorkspacePartVSplitter, xtpTabWorkspacePartHSplitter>
  104. //-----------------------------------------------------------------------
  105. enum XTPTabWorkspacePart
  106. {
  107. xtpTabWorkspacePartBorder,      // Indicates that the border of the MDITabClient TabWorkspace should be drawn.
  108. xtpTabWorkspacePartWidth,       // Indicates that the border width of the MDITabClient TabWorkspace should be recalculated.  I.e. When adding or removing a static frame.
  109. xtpTabWorkspacePartVSplitter,   // Indicates that the vertical splitter of the MDITabClient TabWorkspace should be drawn.
  110. xtpTabWorkspacePartHSplitter    // Indicates that the horizontal splitter of the MDITabClient TabWorkspace should be drawn.
  111. };
  112. //-----------------------------------------------------------------------
  113. // Summary:
  114. //     XTPTabAppearanceStyle is an enumeration used to set the appearance of tabs.
  115. // Example:
  116. //     <code>m_wndTabControl.SetAppearance(xtpTabAppearancePropertyPage2003);</code>
  117. // See Also: CXTPTabManager::SetAppearance, CXTPTabPaintManager::SetAppearance
  118. //
  119. // <KEYWORDS xtpTabAppearancePropertyPage, xtpTabAppearancePropertyPageSelected, xtpTabAppearancePropertyPageFlat, xtpTabAppearancePropertyPage2003, xtpTabAppearanceStateButtons, xtpTabAppearanceVisualStudio, xtpTabAppearanceFlat, xtpTabAppearanceExcel, xtpTabAppearanceVisio>
  120. //-----------------------------------------------------------------------
  121. enum XTPTabAppearanceStyle
  122. {
  123. xtpTabAppearancePropertyPage,           // Gives your tabs an Office 2000 appearance.
  124. xtpTabAppearancePropertyPageSelected,   // Gives your tabs an Office 2000 selected appearance.
  125. xtpTabAppearancePropertyPageFlat,       // Gives your tabs an Office 2000 Flat appearance.
  126. xtpTabAppearancePropertyPage2003,       // Gives your tabs an Office 2003 appearance.
  127. xtpTabAppearanceStateButtons,           // Gives your tabs a State Button appearance.
  128. xtpTabAppearanceVisualStudio,           // Gives your tabs a Visual Studio appearance.
  129. xtpTabAppearanceFlat,                   // Gives your tabs Flat appearance.
  130. xtpTabAppearanceExcel,                  // Gives your tabs an Excel appearance.
  131. xtpTabAppearanceVisio,                  // Gives your tabs a Visio appearance.
  132. xtpTabAppearanceVisualStudio2005,       // Gives your tabs a Visual Studio 2005 appearance.
  133. xtpTabAppearancePropertyPage2007,       // Gives your tabs an Office 2007 appearance.
  134. xtpTabAppearancePropertyPageAccess2007  // Gives your tabs an Office 2007 appearance.
  135. };
  136. //-----------------------------------------------------------------------
  137. // Summary:
  138. //     XTPTabColorStyle is an enumeration used to set the color style of tabs.
  139. // Example:
  140. //     <code>m_wndTabControl.SetColor(xtpTabColorWhidbey);</code>
  141. // See Also:
  142. //     CXTPTabManager::SetColor, CXTPTabPaintManager::SetColor,
  143. //     CXTPTabManager::GetColor, CXTPTabPaintManager::GetColor
  144. //
  145. // <KEYWORDS xtpTabColorDefault, xtpTabColorVisualStudio, xtpTabColorOffice2003, xtpTabColorWinXP, xtpTabColorWhidbey>
  146. //-----------------------------------------------------------------------
  147. enum XTPTabColorStyle
  148. {
  149. xtpTabColorDefault = 1,         // Tabs will use the default color for the currently set Appearance.
  150. xtpTabColorVisualStudio = 2,    // Tabs will use the Visual Studio color style for the currently set Appearance.
  151. xtpTabColorOffice2003 = 4,      // Tabs will use the Office 2003 color style for the currently set Appearance.
  152. xtpTabColorWinXP = 8,           // Tabs will use the Windows XP color style for the currently set Appearance.
  153. xtpTabColorWhidbey = 16,        // Tabs will use the Visual Studio 2005 "Whidbey" color style for the currently set Appearance.
  154. xtpTabColorOffice2007 = 32,     // Tabs will use the Office 2007 color style for the currently set Appearance.
  155. xtpTabColorVisualStudio2008 = 64, // Tabs will use the Visual Studio 2008 color style for the currently set Appearance.
  156. xtpTabColorAccess2007 = 128
  157. };
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     XTPTabPosition is an enumeration used to set the position of tabs.
  161. // Example:
  162. //     <code>m_wndTabControl.SetPosition(xtpTabPositionBottom);</code>
  163. // See Also: CXTPTabManager::SetPosition, CXTPTabManager::GetPosition
  164. //
  165. // <KEYWORDS xtpTabPositionTop, xtpTabPositionLeft, xtpTabPositionBottom, xtpTabPositionRight>
  166. //-----------------------------------------------------------------------
  167. enum XTPTabPosition
  168. {
  169. xtpTabPositionTop,          // Tabs will be drawn on the Top.
  170. xtpTabPositionLeft,         // Tabs will be drawn on the Left.
  171. xtpTabPositionBottom,       // Tabs will be drawn on the Bottom.
  172. xtpTabPositionRight         // Tabs will be drawn on the Right.
  173. };
  174. //-----------------------------------------------------------------------
  175. // Summary:
  176. //     XTPTabLayoutStyle is an enumeration used to set the layout of tabs.
  177. // Example:
  178. //     <code>m_wndTabControl.SetLayoutStyle(xtpTabLayoutCompressed);</code>
  179. // See Also: CXTPTabManager::SetLayoutStyle, CXTPTabManager::GetLayout
  180. //
  181. // <KEYWORDS xtpTabLayoutAutoSize, xtpTabLayoutSizeToFit, xtpTabLayoutFixed, xtpTabLayoutCompressed, xtpTabLayoutMultiRow>
  182. //-----------------------------------------------------------------------
  183. enum XTPTabLayoutStyle
  184. {
  185. xtpTabLayoutAutoSize,       // Tabs will be automatically sized based on the caption and image size.  With this flag set, tabs will appear in their normal size.
  186. xtpTabLayoutSizeToFit,      // Tabs are sized to fit within the tab panel.  All tabs will be compressed and forced to fit into the tab panel.
  187. xtpTabLayoutFixed,          // All tabs will be set to a fixed size within the tab panel.
  188. xtpTabLayoutCompressed,     // Tabs will be compressed within the tab panel.  This will compress the size of the tabs, but all tabs will not be forced into the tab panel.
  189. xtpTabLayoutMultiRow,       // Causes a tab control to display multiple rows of tabs
  190. xtpTabLayoutRotated         // Rotated tab layout - all tabs rotated to 90 degree.
  191. };
  192. //-----------------------------------------------------------------------
  193. // Summary:
  194. //     XTPTabToolTipBehaviour is an enumeration used to set tooltip behaviour for tabs
  195. // Example:
  196. //     <code>m_wndTabControl.GetPaintManager()->EnableToolTips(xtpTabToolTipAlways);</code>
  197. // See Also: CXTPTabPaintManager::EnableToolTips, XTPTabLayoutStyle
  198. //
  199. // <KEYWORDS xtpTabToolTipNever, xtpTabToolTipAlways, xtpTabToolTipShrinkedOnly
  200. //-----------------------------------------------------------------------
  201. enum XTPTabToolTipBehaviour
  202. {
  203. xtpTabToolTipNever,         // Doesn't show tooltips for tabs
  204. xtpTabToolTipAlways,        // Show tooltips for tabs always
  205. xtpTabToolTipShrinkedOnly   // Show tooltips only if tab was shrinked (see xtpTabLayoutSizeToFit layout)
  206. };
  207. //-----------------------------------------------------------------------
  208. // Summary:
  209. //     XTPTabClientFrame is an enumeration used to set the client frame style drawn around the client of tabs.
  210. // Example:
  211. //     <code>m_wndTabControl.GetPaintManager()->m_clientFrame = xtpTabFrameBorder;</code>
  212. // See Also: CXTPTabManager, CXTPTabPaintManager
  213. //
  214. // <KEYWORDS xtpTabFrameBorder, xtpTabFrameSingleLine, xtpTabFrameNone>
  215. //-----------------------------------------------------------------------
  216. enum XTPTabClientFrame
  217. {
  218. xtpTabFrameBorder,      // With this flag set, a border will appear around the client area.
  219. xtpTabFrameSingleLine,  // With this flag set, only a single line is used as a border around the client area.
  220. xtpTabFrameNone         // With this flag set, no border will appear around the client area.
  221. };
  222. //-----------------------------------------------------------------------
  223. // Summary:
  224. //     XTPTabNavigateButton is an enumeration used to identify navigation
  225. //     buttons within a tab control.
  226. // Remarks:
  227. //     This enumerator is used by the CXTPTabManagerNavigateButton class to
  228. //     identify navigation buttons.
  229. // Example:
  230. //      See XTPTabNavigateButtonFlags for an example.
  231. // See Also:
  232. //     XTPTabNavigateButtonFlags, CXTPTabManager, CXTPTabManagerNavigateButton
  233. //
  234. // <KEYWORDS xtpTabNavigateButtonLeft, xtpTabNavigateButtonRight, xtpTabNavigateButtonClose>
  235. //-----------------------------------------------------------------------
  236. enum XTPTabNavigateButton
  237. {
  238. xtpTabNavigateButtonLeft,   // Left tab navigation button.
  239. xtpTabNavigateButtonRight,  // Right tab navigation button.
  240. xtpTabNavigateButtonClose   // Close tab navigation button.
  241. };
  242. //-----------------------------------------------------------------------
  243. // Summary:
  244. //     XTPTabNavigateButtonFlags is an enumeration used to indicate
  245. //     when a navigate button will be displayed.  This style is
  246. //     applied to one button.  Navigate buttons include the left,
  247. //     right, and close buttons that appear in the tab header area.
  248. //
  249. // Remarks:
  250. //     If automatic is selected, then the button will appear only
  251. //     when needed.  I.e. When the XTPTabLayoutStyle is set to
  252. //     xtpTabLayoutAutoSize, all tab might not fit in the tab header
  253. //     area.  When there are more tabs than can fit in the header, the
  254. //     button will automatically be displayed.
  255. //
  256. // Example:
  257. //     This example code illustrates how to specify when the tab navigation
  258. //     buttons are displayed.
  259. // <code>
  260. // //Gets a reference to the tab manager
  261. // CXTPTabManager* pManager = GetManager();
  262. // if (pManager)
  263. // {
  264. //     //Finds the left navigation button and specifies that it is always displayed
  265. //     pManager->FindNavigateButton(xtpTabNavigateButtonLeft)->SetFlags(xtpTabNavigateButtonAlways);
  266. //     //Finds the right navigation button and specifies that it is never displayed
  267. //     pManager->FindNavigateButton(xtpTabNavigateButtonRight)->SetFlags(xtpTabNavigateButtonNone);
  268. //     //Finds the close navigation button and specifies that it is always displayed
  269. //     pManager->FindNavigateButton(xtpTabNavigateButtonClose)->SetFlags(xtpTabNavigateButtonAlways);
  270. // }
  271. // //Called to recalculate tab area and reposition components
  272. // pManager->Reposition();
  273. // </code>
  274. // See Also: CXTPTabManagerNavigateButton, CXTPTabManagerNavigateButton::SetFlags,
  275. //           CXTPTabManagerNavigateButton::GetFlags
  276. //
  277. // <KEYWORDS xtpTabNavigateButtonNone, xtpTabNavigateButtonAutomatic, xtpTabNavigateButtonAlways>
  278. //-----------------------------------------------------------------------
  279. enum XTPTabNavigateButtonFlags
  280. {
  281. xtpTabNavigateButtonNone,       // Never display the navigate button.
  282. xtpTabNavigateButtonAutomatic,  // Automatically display the navigate button.
  283. xtpTabNavigateButtonAlways      // Always display the navigate button.
  284. };
  285. //-------------------------------------------------------------------------
  286. // Summary:
  287. //     CXTPTabPaintManager is a CCmdTarget derived class that is used to
  288. //     store the color and appearance information of the tabs in the
  289. //     tab manager.
  290. //-------------------------------------------------------------------------
  291. class _XTP_EXT_CLASS CXTPTabPaintManager : public CXTPCmdTarget
  292. {
  293. public:
  294. //-------------------------------------------------------------------------
  295. // Summary:
  296. //     CColorSet is a class that represents the colors of all the
  297. //     components (tab button, tab button border, etc) of the tab manager.
  298. // Remarks:
  299. //     CColorSet colorizes the different parts that make up a tab, tab header,
  300. //     tab client, and tab manager control.
  301. //
  302. //     Colors should be updated in the RefreshMetrics member's for each
  303. //     CColorSet object.
  304. //-------------------------------------------------------------------------
  305. class _XTP_EXT_CLASS CColorSet
  306. {
  307. public:
  308. //-----------------------------------------------------------------------
  309. // Summary:
  310. //     Colors used for Excel tab button colorization.
  311. // Remarks:
  312. //     Members of COLORSET_TAB_EXCEL are only used when the
  313. //     XTPTabAppearanceStyle is set to xtpTabAppearanceExcel.
  314. //
  315. //     Both the m_csExcelSelected and m_csExcelNormal color sets are
  316. //     used when the xtpTabAppearanceExcel appearance is applied.
  317. //
  318. //     By default, the "selected" excel style tab will display the
  319. //     clrLeftInnerBorder and clrTopInnerBorder in addition to the
  320. //     outer borders to indicate that the tab is selected.
  321. //
  322. //     The following color sets customize members of COLORSET_TAB_EXCEL
  323. //     in addition to the color members of CColorSet:
  324. //     * <b>CColorSetOffice2003</b>  Office 2003 Color Set.
  325. //     * <b>CColorSetDefault</b>     Default Color Set.
  326. //
  327. // See Also: m_csExcelSelected, m_csExcelNormal
  328. //-----------------------------------------------------------------------
  329. struct COLORSET_TAB_EXCEL
  330. {
  331. CXTPPaintManagerColor clrLeftInnerBorder;       // Color of the left inner border of the tab button.
  332. CXTPPaintManagerColor clrTopInnerBorder;        // Color of the top inner border of the tab button.
  333. CXTPPaintManagerColor clrRightInnerBorder;      // Color of the right inner border of the tab button.
  334. CXTPPaintManagerColor clrLeftOuterBorder;       // Color of the left outer border of the tab button.
  335. CXTPPaintManagerColor clrRightOuterBorder;      // Color of the right outer border of the tab button.
  336. CXTPPaintManagerColor clrTopOuterBorder;        // Color of the top outer border of the tab button.
  337. };
  338. //-----------------------------------------------------------------------
  339. // Summary:
  340. //     Colors used for Office 2000 tab button colorization.
  341. // Remarks:
  342. //     The tab buttons and the tab client area cast a shadow. The shadow consists
  343. //     of a normal and dark color.  One or both of these colors can be used
  344. //     depending on the selected XTPTabAppearanceStyle.
  345. //
  346. //     Members of COLORSET_TAB_PROPERTYPAGE are only used when the
  347. //     XTPTabAppearanceStyle is set to xtpTabAppearancePropertyPage,
  348. //     xtpTabAppearancePropertyPageFlat, xtpTabAppearancePropertyPageSelected,
  349. //     and xtpTabAppearancePropertyPage2003.
  350. //
  351. //     The following color sets customize members of COLORSET_TAB_PROPERTYPAGE
  352. //     in addition to the color members of CColorSet:
  353. //     * <b>CColorSetOffice2003</b> Office 2003 Color Set.
  354. //     * <b>CColorSetWinXP</b>      Windows XP Color Set.
  355. //     * <b>CColorSetDefault</b>    Default Color Set.
  356. //
  357. // See Also: m_csPropertyPage
  358. //-----------------------------------------------------------------------
  359. struct COLORSET_TAB_PROPERTYPAGE
  360. {
  361. CXTPPaintManagerColor clrHighlight;      // Color of tab button on mouse over when hot tracking is enabled.
  362. CXTPPaintManagerColor clrShadow;         // Color of the tab button's shadow.
  363. CXTPPaintManagerColor clrDarkShadow;     // Color of the tab button's dark shadow.
  364. };
  365. //-----------------------------------------------------------------------
  366. // Summary:
  367. //     Colors used for Office 2003 tab button colorization.
  368. // Remarks:
  369. //     Members of COLORSET_TAB_PROPERTYPAGE2003 are only used when the
  370. //     XTPTabAppearanceStyle is set to xtpTabAppearancePropertyPage2003.
  371. //
  372. //     The following color sets customize members of COLORSET_TAB_PROPERTYPAGE2003
  373. //     in addition to the color members of CColorSet:
  374. //     * <b>CColorSetOffice2003</b> Office 2003 Color Set.
  375. //     * <b>CColorSetWhidbey</b>    Visual Studio 2005 "Whidbey" Color Set.
  376. //     * <b>CColorSetDefault</b>    Default Color Set.
  377. //
  378. // See Also: m_csPropertyPage2003
  379. //-----------------------------------------------------------------------
  380. struct COLORSET_TAB_PROPERTYPAGE2003
  381. {
  382. CXTPPaintManagerColor clrDarkShadow;            // Color of the tab buttons shadow.
  383. CXTPPaintManagerColor clrFrameBorder;           // Color of the XTPTabClientFrame.
  384. CXTPPaintManagerColor clrBorderLeftHighlight;   // Color of the left border of a tab button.
  385. CXTPPaintManagerColor clrBorderTopHighlight;    // Color of the top border of a tab button.
  386. };
  387. //-----------------------------------------------------------------------
  388. // Summary:
  389. //     Colors used for "State Button" tab button colorization.
  390. // Remarks:
  391. //
  392. //     Members of COLORSET_TAB_STATEBUTTON are only used when the
  393. //     XTPTabAppearanceStyle is set to xtpTabAppearanceStateButtons.
  394. //
  395. //     The following color sets customize members of COLORSET_TAB_STATEBUTTON
  396. //     in addition to the color members of CColorSet:
  397. //     * <b>CColorSetOffice2003</b> Office 2003 Color Set.
  398. //     * <b>CColorSetDefault</b>    Default Color Set.
  399. //
  400. // See Also: m_csStateButton
  401. //-----------------------------------------------------------------------
  402. struct COLORSET_TAB_STATEBUTTON
  403. {
  404. CXTPPaintManagerColorGradient clrFace;    // Color of the currently selected tab button.
  405. CXTPPaintManagerColorGradient clrBorder;  // Border color of the currently selected tab button.
  406. };
  407. public:
  408. //-------------------------------------------------------------------------
  409. // Summary:
  410. //     Constructs a CColorSet object.
  411. //-------------------------------------------------------------------------
  412. CColorSet();
  413. //-------------------------------------------------------------------------
  414. // Summary:
  415. //     Destroys a CColorSet object, handles cleanup and deallocation.
  416. //-------------------------------------------------------------------------
  417. virtual ~CColorSet();
  418. public:
  419. //-------------------------------------------------------------------------
  420. // Summary:
  421. //     This member is called to refresh the visual metrics of the tabs.
  422. // Remarks:
  423. //     All of the color members are refreshed when this is called.
  424. //     This member can be override this member to change the colors of
  425. //     the color members.
  426. //-------------------------------------------------------------------------
  427. virtual void RefreshMetrics();
  428. public:
  429. //-----------------------------------------------------------------------
  430. // Summary:
  431. //     Call this member to change the color of text in the tab.
  432. // Parameters:
  433. //     pDC   - Pointer to a valid device context.
  434. //     pItem - Change text color of this tab.
  435. //-----------------------------------------------------------------------
  436. virtual void SetTextColor(CDC* pDC, CXTPTabManagerItem* pItem);
  437. //-----------------------------------------------------------------------
  438. // Summary:
  439. //     This member is called to fill the header of the TabClient of the tab manager.
  440. // Parameters:
  441. //     pDC         - Pointer to a valid device context.
  442. //     rc          - Bounding rectangle of the  tab header.
  443. //     pTabManager - Fill the header of this CXTPTabManager object.
  444. // Remarks:
  445. //     The TabClient header is the bounding rectangle with tab tab buttons.
  446. //     The bounding rectangle can be retrieved with the CXTPTabPaintManager::CAppearanceSet::GetHeaderRect,
  447. //     and CXTPTabManager::GetHeaderRect members.
  448. // See Also: CXTPTabPaintManager::CAppearanceSet::GetHeaderRect, CXTPTabManager::GetHeaderRect
  449. //-----------------------------------------------------------------------
  450. virtual void FillHeader(CDC* pDC, CRect rc, CXTPTabManager* pTabManager);
  451. //-----------------------------------------------------------------------
  452. // Summary:
  453. //     This member is called to fill the TabClient area of the tab manager.
  454. // Parameters:
  455. //     pDC         - Pointer to a valid device context.
  456. //     rc          - Bounding rectangle of the tab client area.
  457. //     pTabManager - Fill the tab client area of this CXTPTabManager object.
  458. // Remarks:
  459. //     The TabClient bounding rectangle can be retrieved with the
  460. //     CXTPTabPaintManager::CAppearanceSet::GetClientRect,
  461. //     and CXTPTabManager::GetClientRect members.
  462. // Returns:
  463. //     If a tab is selected then the color from CXTPTabManager::GetItemColor
  464. //     for the currently selected tab is returned,
  465. //     otherwise m_clrButtonSelected is returned.
  466. //-----------------------------------------------------------------------
  467. virtual COLORREF FillClient(CDC* pDC, CRect rc, CXTPTabManager* pTabManager);
  468. //-----------------------------------------------------------------------
  469. // Summary:
  470. //     This member is called to fill a tab button when the XTPTabAppearanceStyle is
  471. //     xtpTabAppearanceStateButtons.
  472. // Parameters:
  473. //     pDC    - Pointer to a valid device context.
  474. //     rcItem - Bounding rectangle of the tab button to fill.
  475. //     pItem  - Tab button to draw.
  476. // Remarks:
  477. //     This member is only used to fill buttons when the XTPTabAppearanceStyle is
  478. //     xtpTabAppearanceStateButtons, for all other buttons, FillPropertyButton is
  479. //     used.
  480. // See Also: FillPropertyButton
  481. //-----------------------------------------------------------------------
  482. virtual void FillStateButton(CDC* pDC, CRect rcItem, CXTPTabManagerItem* pItem);
  483. //-----------------------------------------------------------------------
  484. // Summary:
  485. //     This member is called to fill a tab button.
  486. // Parameters:
  487. //     pDC    - Pointer to a valid device context.
  488. //     rcItem - Bounding rectangle of the tab button to fill.
  489. //     pItem  - Tab button to draw.
  490. // Returns:
  491. //     COLORREF returned from CXTPTabManager::GetItemColor(pItem).
  492. // Remarks:
  493. //     This member is used to fill all tab buttons except when the XTPTabAppearanceStyle is
  494. //     xtpTabAppearanceStateButtons.  xtpTabAppearanceStateButtons require
  495. //     the FillStateButton member.
  496. // See Also: FillStateButton
  497. //-----------------------------------------------------------------------
  498. virtual COLORREF FillPropertyButton(CDC* pDC, CRect rcItem, CXTPTabManagerItem* pItem);
  499. //-----------------------------------------------------------------------
  500. // Summary:
  501. //     This method is called to protect client area to be drawn.
  502. // Parameters:
  503. //     pDC         - Pointer to a valid device context.
  504. //     rcClient    - Bounding rectangle of the TabClient area.  This will
  505. //                   be the clipping region for the device context.
  506. //     pTabManager - Pointer to the CXTPTabManager.
  507. //-----------------------------------------------------------------------
  508. virtual void SelectClipRgn(CDC* pDC, CRect rcClient, CXTPTabManager* pTabManager);
  509. //-----------------------------------------------------------------------
  510. // Summary:
  511. //     This member is called to fill the tab navigation buttons.
  512. // Parameters:
  513. //     pDC     - Pointer to a valid device context.
  514. //     pButton - Tab navigation button to fill.
  515. //     rc      - Bounding rectangle of the tab navigation button.
  516. // Remarks:
  517. //     This member must be overridden and takes care of filling the
  518. //     tab navigation buttons that are in the header of the TabClient.
  519. //     The XTPTabColorStyle CColorSet classes override this to perform
  520. //     actions such as painting the highlighting, pressed, and normal
  521. //     versions of the tab navigation buttons.
  522. //
  523. // See Also: CXTPTabManager::GetNavigateButton, CXTPTabManagerNavigateButton
  524. //-----------------------------------------------------------------------
  525. virtual void FillNavigateButton(CDC* pDC, CXTPTabManagerNavigateButton* pButton, CRect& rc) = 0;
  526. //-----------------------------------------------------------------------
  527. // Summary:
  528. //     Call this member to get the color of a tab.
  529. // Parameters:
  530. //     pItem - Get color of this Tab.
  531. // Returns:
  532. //     COLORREF of pItem.
  533. // Remarks:
  534. //     This is used in many of the CColorSet "fill" functions.
  535. // See Also: CXTPTabManager::GetItemColor, XTPTabColorStyle, SetColor, GetColorSet, SetColorSet
  536. //-----------------------------------------------------------------------
  537. virtual COLORREF GetItemColor(CXTPTabManagerItem* pItem);
  538. //-----------------------------------------------------------------------
  539. // Summary:
  540. //     Call this member to do a gradient fill of a rectangle
  541. //     with color that smoothly fades from top to bottom.
  542. //
  543. // Parameters:
  544. //     pDC      - Pointer to a valid device context.
  545. //     rc       - Rectangle to fill with gradient.
  546. //     clrLight - COLORREF to start gradient from.
  547. //     clrDark  - COLORREF to fill to.
  548. //     position - XTPTabPosition of the tab buttons.
  549. //
  550. //Remarks:
  551. //     The color will smoothly fade from clrLight to clrDark, from
  552. //     top to bottom.
  553. //
  554. //     If clrLight is XTP_TABMANAGER_COLOR_SHADED, then the
  555. //     rectangle will be filled with a special "shaded" fill
  556. //     type and clrDark will be ignored.  See description of
  557. //     XTP_TABMANAGER_COLOR_SHADED for more information on this
  558. //     fill type.
  559. //
  560. // See Also: XTP_TABMANAGER_COLOR_SHADED
  561. //-----------------------------------------------------------------------
  562. void GradientFill(CDC* pDC, CRect rc, COLORREF clrLight, COLORREF clrDark, XTPTabPosition position);
  563. //-----------------------------------------------------------------------
  564. // Summary:
  565. //     The member is called to determine if this ColorSet supports
  566. //     Windows XP Themes and if a Windows XP Theme is enabled.
  567. // Returns:
  568. //     Always returns FALSE in the base class implementation.
  569. // Remarks:
  570. //     This member is overridden in CXTPTabPaintManager::CColorSetWinXP.
  571. // See Also: CXTPTabPaintManager::CColorSetWinXP::IsAppThemed
  572. //-----------------------------------------------------------------------
  573. virtual BOOL IsAppThemed() const;
  574. public:
  575. CXTPPaintManagerColorGradient m_clrHeaderFace;      // Color set of the tab header background.
  576. CXTPPaintManagerColorGradient m_clrAutoHideFace;    // Color set of the auto-hide panel background.  This is the tab header for docking pane tabs when the pane is hidden.
  577. CXTPPaintManagerColor         m_clrFrameBorder;     // Color of border placed around the tab buttons and tab client.
  578. CXTPPaintManagerColor         m_clrControlFace;     // Color of the control foreground.  This is the area that the tab header and tab client are drawn on.
  579. CXTPPaintManagerColor         m_clrPaneFace;        // Color of the control pane foreground.
  580. CXTPPaintManagerColor         m_clrBorderHighlight; // Color of highlight border
  581. CXTPPaintManagerColor         m_clrButtonSelected;  // Color of the currently selected tab.
  582. CXTPPaintManagerColor         m_clrButtonHighlighted; // Tab button color on mouse over when hot tracking is enabled.
  583. CXTPPaintManagerColor         m_clrButtonPressed;     // Tab pressed button color
  584. CXTPPaintManagerColor         m_clrButtonNormal;    // Color of normal tabs.  Normal tabs are tabs that are not selected or disabled.
  585. CXTPPaintManagerColor         m_clrNormalText;      // Color of text in a normal tab.  Normal tabs are tabs that are not selected or disabled.
  586. CXTPPaintManagerColor         m_clrInActiveText;    // Color of text for tabs in all non-active groups of tabs in MDITabClient.
  587. CXTPPaintManagerColor         m_clrSelectedText;    // Color of text in a "selected" tab button.  The "selected" tab button is the tab with focus.  I.e. The tab becomes active when it is clicked.
  588. CXTPPaintManagerColor         m_clrHighlightText;   // Color of text on mouse over when hot tracking is enabled.
  589. CXTPPaintManagerColor         m_clrDisabledText;    // Color of text when a tab is disabled.  A disabled tab cannot receive focus.
  590. COLORSET_TAB_STATEBUTTON      m_csStateButton;      // Color set of state button style tabs.
  591. COLORSET_TAB_PROPERTYPAGE     m_csPropertyPage;     // Color set of visual studio style tabs.
  592. COLORSET_TAB_PROPERTYPAGE2003 m_csPropertyPage2003; // Color set of Office 2003 style tabs.
  593. COLORSET_TAB_EXCEL            m_csExcelSelected;    // Color set of Selected (focused) Excel style tabs.
  594. COLORSET_TAB_EXCEL            m_csExcelNormal;      // Color set of Normal Excel style tabs.
  595. protected:
  596. CXTPTabPaintManager*          m_pPaintManager;      // Self Paint Manager pointer.
  597. friend class CXTPTabPaintManager;
  598. };
  599. //-------------------------------------------------------------------------
  600. // Summary:
  601. //     CColorSetDefault is a CColorSet derived class that represents the
  602. //     default tab color set.
  603. // Remarks:
  604. //     To use the default color set, SetColor is used to apply
  605. //     the xtpTabColorDefault XTPTabColorStyle.
  606. //
  607. //     The following appearances (XTPTabAppearanceStyle) support CColorSetDefault:
  608. //     * <b>xtpTabAppearancePropertyPage</b>         Office 2000 appearance.
  609. //     * <b>xtpTabAppearancePropertyPageSelected</b> Office 2000 selected appearance.
  610. //     * <b>xtpTabAppearancePropertyPageFlat</b>     Office 2000 Flat appearance.
  611. //     * <b>xtpTabAppearancePropertyPage2003</b>     Office 2003 appearance.
  612. //     * <b>xtpTabAppearanceStateButtons</b>         State Button appearance.
  613. //     * <b>xtpTabAppearanceVisualStudio</b>         Visual Studio appearance.
  614. //     * <b>xtpTabAppearanceFlat</b>                 Flat appearance.
  615. //     * <b>xtpTabAppearanceExcel</b>                Excel appearance.
  616. //     * <b>xtpTabAppearanceVisio</b>                Visio appearance.
  617. //
  618. // See Also: XTPTabColorStyle, XTPTabAppearanceStyle, SetAppearance, GetAppearance, GetAppearanceSet,
  619. //           SetColor, GetColor, GetColorSet, SetColorSet, SetAppearanceSet
  620. //-------------------------------------------------------------------------
  621. class _XTP_EXT_CLASS CColorSetDefault : public CColorSet
  622. {
  623. public:
  624. //-------------------------------------------------------------------------
  625. // Summary:
  626. //     This member is called to refresh the visual metrics of the tabs.
  627. // Remarks:
  628. //     All of the color members are refreshed when this is called.
  629. //     This member can be override this member to change the colors of
  630. //     the color members.
  631. //-------------------------------------------------------------------------
  632. virtual void RefreshMetrics();
  633. //-----------------------------------------------------------------------
  634. // Summary:
  635. //     This member is called to fill the tab navigation buttons.
  636. // Parameters:
  637. //     pDC     - Pointer to a valid device context.
  638. //     pButton - Tab navigation button to fill.
  639. //     rc      - Bounding rectangle of the tab navigation button.
  640. // Remarks:
  641. //     This member takes care of filling the tab navigation buttons
  642. //     that are in the header of the TabClient.
  643. //     The XTPTabColorStyle CColorSet classes override this to perform
  644. //     actions such as painting the highlighting, pressed, and normal
  645. //     versions of the tab navigation buttons.
  646. //
  647. // See Also: CXTPTabManager::GetNavigateButton, CXTPTabManagerNavigateButton
  648. //-----------------------------------------------------------------------
  649. void FillNavigateButton(CDC* pDC, CXTPTabManagerNavigateButton* pButton, CRect& rc);
  650. };
  651. //-------------------------------------------------------------------------
  652. // Summary:
  653. //     CColorSetVisualStudio is a CColorSetDefault derived class that represents the
  654. //     Visual Studio tab color set.
  655. // Remarks:
  656. //     To use the Visual Studio color set, SetColor is used to apply
  657. //     the xtpTabColorVisualStudio XTPTabColorStyle.
  658. //
  659. //     The following appearances (XTPTabAppearanceStyle) support CColorSetVisualStudio:
  660. //     * <b>xtpTabAppearancePropertyPageFlat</b>   Office 2000 Flat appearance.
  661. //     * <b>xtpTabAppearanceStateButtons</b>       State Button appearance.
  662. //     * <b>xtpTabAppearanceVisualStudio</b>       Visual Studio appearance.
  663. //     * <b>xtpTabAppearanceFlat</b>               Flat appearance.
  664. //     * <b>xtpTabAppearanceExcel</b>              Excel appearance.
  665. //
  666. // See Also: XTPTabColorStyle, XTPTabAppearanceStyle, SetAppearance, GetAppearance, GetAppearanceSet,
  667. //           SetColor, GetColor, GetColorSet, SetColorSet, SetAppearanceSet
  668. //-------------------------------------------------------------------------
  669. class _XTP_EXT_CLASS CColorSetVisualStudio : public CColorSetDefault
  670. {
  671. public:
  672. //-------------------------------------------------------------------------
  673. // Summary:
  674. //     This member is called to refresh the visual metrics of the tabs.
  675. // Remarks:
  676. //     All of the color members are refreshed when this is called.
  677. //     This member can be override this member to change the colors of
  678. //     the color members.
  679. //-------------------------------------------------------------------------
  680. virtual void RefreshMetrics();
  681. //-----------------------------------------------------------------------
  682. // Summary:
  683. //     This member is called to fill the tab navigation buttons.
  684. // Parameters:
  685. //     pDC     - Pointer to a valid device context.
  686. //     pButton - Tab navigation button to fill.
  687. //     rc      - Bounding rectangle of the tab navigation button.
  688. // Remarks:
  689. //     This member takes care of filling the tab navigation buttons
  690. //     that are in the header of the TabClient.
  691. //     The XTPTabColorStyle CColorSet classes override this to perform
  692. //     actions such as painting the highlighting, pressed, and normal
  693. //     versions of the tab navigation buttons.
  694. //
  695. // See Also: CXTPTabManager::GetNavigateButton, CXTPTabManagerNavigateButton
  696. //-----------------------------------------------------------------------
  697. void FillNavigateButton(CDC* pDC, CXTPTabManagerNavigateButton* pButton, CRect& rc);
  698. };
  699. //-------------------------------------------------------------------------
  700. // Summary:
  701. //     CColorSetOffice2003 is a CColorSetDefault derived class that represents the
  702. //     Office 2003 tab color set.
  703. // Remarks:
  704. //     To use the Office 2003 color set, SetColor is used to apply
  705. //     the xtpTabColorOffice2003 XTPTabColorStyle.
  706. //
  707. //     The following appearances (XTPTabAppearanceStyle) support CColorSetOffice2003:
  708. //     * <b>xtpTabAppearancePropertyPage</b>         Office 2000 appearance.
  709. //     * <b>xtpTabAppearancePropertyPageSelected</b> Office 2000 selected appearance.
  710. //     * <b>xtpTabAppearancePropertyPageFlat</b>     Office 2000 Flat appearance.
  711. //     * <b>xtpTabAppearancePropertyPage2003</b>     Office 2003 appearance.
  712. //     * <b>xtpTabAppearanceStateButtons</b>         State Button appearance.
  713. //     * <b>xtpTabAppearanceVisualStudio</b>         Visual Studio appearance.
  714. //     * <b>xtpTabAppearanceFlat</b>                 Flat appearance.
  715. //     * <b>xtpTabAppearanceExcel</b>                Excel appearance.
  716. //     * <b>xtpTabAppearanceVisio</b>                Visio appearance.
  717. //
  718. // See Also: XTPTabColorStyle, XTPTabAppearanceStyle, SetAppearance, GetAppearance, GetAppearanceSet,
  719. //           SetColor, GetColor, GetColorSet, SetColorSet, SetAppearanceSet
  720. //-------------------------------------------------------------------------
  721. class _XTP_EXT_CLASS CColorSetOffice2003 : public CColorSetDefault
  722. {
  723. public:
  724. //-------------------------------------------------------------------------
  725. // Summary:
  726. //     This member is called to refresh the visual metrics of the tabs.
  727. // Remarks:
  728. //     All of the color members are refreshed when this is called.
  729. //     This member can be override this member to change the colors of
  730. //     the color members.
  731. //     A different color set will be used for each luna color if used.
  732. //-------------------------------------------------------------------------
  733. virtual void RefreshMetrics();
  734. //-----------------------------------------------------------------------
  735. // Summary:
  736. //     This member is called to fill a tab button.
  737. // Parameters:
  738. //     pDC    - Pointer to a valid device context.
  739. //     rcItem - Bounding rectangle of the tab button to fill.
  740. //     pItem  - Tab button to draw.
  741. // Returns:
  742. //     COLORREF returned from CXTPTabManager::GetItemColor(pItem).
  743. // Remarks:
  744. //     This member is used to fill all tab buttons except when the XTPTabAppearanceStyle is
  745. //     xtpTabAppearanceStateButtons.  xtpTabAppearanceStateButtons require
  746. //     the FillStateButton member.
  747. //
  748. //     Tab buttons will use CXTPTabPaintManager::CColorSet::GradientFill to
  749. //     fill the buttons.  The gradient will use the color of the tab item
  750. //     blended with RGB(255, 255, 255) to produce a "light color", the gradient will
  751. //     start with the "light color" and fill to the normal color of the tab item.
  752. //
  753. // See Also: FillStateButton
  754. //-----------------------------------------------------------------------
  755. virtual COLORREF FillPropertyButton(CDC* pDC, CRect rcItem, CXTPTabManagerItem* pItem);
  756. //-----------------------------------------------------------------------
  757. // Summary:
  758. //     This member is called to fill the tab navigation buttons.
  759. // Parameters:
  760. //     pDC     - Pointer to a valid device context.
  761. //     pButton - Tab navigation button to fill.
  762. //     rc      - Bounding rectangle of the tab navigation button.
  763. // Remarks:
  764. //     This member takes care of filling the tab navigation buttons
  765. //     that are in the header of the TabClient.
  766. //     The XTPTabColorStyle CColorSet classes override this to perform
  767. //     actions such as painting the highlighting, pressed, and normal
  768. //     versions of the tab navigation buttons.
  769. //
  770. // See Also: CXTPTabManager::GetNavigateButton, CXTPTabManagerNavigateButton, Rectangle
  771. //-----------------------------------------------------------------------
  772. virtual void FillNavigateButton(CDC* pDC, CXTPTabManagerNavigateButton* pButton, CRect& rc);
  773. //-----------------------------------------------------------------------
  774. // Summary:
  775. //     This member draws a rectangle with a border.
  776. // Parameters:
  777. //     pDC    - Pointer to a valid device context.
  778. //     rc     - Specifies the rectangle in logical units.
  779. //     nPen   - Specifies the color used to paint the rectangle.
  780. //     nBrush - Specifies the color used to fill the rectangle.
  781. // Remarks:
  782. //     This member draws a rectangle using the current pen. The interior
  783. //     of the rectangle is filled using the current brush.
  784. //
  785. //     This member is called by FillNavigateButton to fill the
  786. //     tab navigation buttons when luna colors are disabled.
  787. // See Also: FillNavigateButton
  788. //-----------------------------------------------------------------------
  789. void Rectangle(CDC* pDC, CRect rc, int nPen, int nBrush);
  790. protected:
  791. CXTPPaintManagerColor m_clrNavigateButtonBorder;    // Border color of tab navigation buttons on mouse over.
  792. BOOL     m_bLunaTheme;              // TRUE if the current system theme is xtpSystemThemeSilver, xtpSystemThemeOlive, or xtpSystemThemeOlive, FALSE otherwise.
  793. };
  794. //===========================================================================
  795. // Summary:
  796. //     CColorSetOffice2007 is a CColorSetOffice2003 derived class that represents the
  797. //     Office 2007 tab color set.
  798. //===========================================================================
  799. class _XTP_EXT_CLASS CColorSetOffice2007 : public CColorSetOffice2003
  800. {
  801. public:
  802. //-------------------------------------------------------------------------
  803. // Summary:
  804. //     This member is called to refresh the visual metrics of the tabs.
  805. // Remarks:
  806. //     All of the color members are refreshed when this is called.
  807. //     This member can be override this member to change the colors of
  808. //     the color members.
  809. //-------------------------------------------------------------------------
  810. virtual void RefreshMetrics();
  811. //-----------------------------------------------------------------------
  812. // Summary:
  813. //     This member is called to fill the tab navigation buttons.
  814. // Parameters:
  815. //     pDC     - Pointer to a valid device context.
  816. //     pButton - Tab navigation button to fill.
  817. //     rc      - Bounding rectangle of the tab navigation button.
  818. // Remarks:
  819. //     This member takes care of filling the tab navigation buttons
  820. //     that are in the header of the TabClient.
  821. //     The XTPTabColorStyle CColorSet classes override this to perform
  822. //     actions such as painting the highlighting, pressed, and normal
  823. //     versions of the tab navigation buttons.
  824. //
  825. //     If IsAppThemed is FALSE, then CColorSetDefault::FillNavigationButton
  826. //     is used.
  827. //
  828. // See Also: CXTPTabManager::GetNavigateButton, CXTPTabManagerNavigateButton
  829. //-----------------------------------------------------------------------
  830. void FillNavigateButton(CDC* pDC, CXTPTabManagerNavigateButton* pButton, CRect& rc);
  831. protected:
  832. CXTPPaintManagerColor  m_clrButtonText;
  833. };
  834. //===========================================================================
  835. // Summary:
  836. //     CColorSetAccess2007 is a CColorSetOffice2007 derived class that represents the
  837. //     Office 2007 tab color set.
  838. //===========================================================================
  839. class _XTP_EXT_CLASS CColorSetAccess2007 : public CColorSetOffice2007
  840. {
  841. public:
  842. //-------------------------------------------------------------------------
  843. // Summary:
  844. //     This member is called to refresh the visual metrics of the tabs.
  845. // Remarks:
  846. //     All of the color members are refreshed when this is called.
  847. //     This member can be override this member to change the colors of
  848. //     the color members.
  849. //-------------------------------------------------------------------------
  850. virtual void RefreshMetrics();
  851. };
  852. //-------------------------------------------------------------------------
  853. // Summary:
  854. //     CColorSetWinXP is a CColorSetDefault derived class that represents the
  855. //     Windows XP tab color set.
  856. // Remarks:
  857. //     To use the Windows XP color set, SetColor is used to apply
  858. //     the xtpTabColorWinXP XTPTabColorStyle.
  859. //
  860. //     The following appearances (XTPTabAppearanceStyle) support CColorSetWinXP:
  861. //     * <b>xtpTabAppearancePropertyPage</b>         Office 2000 appearance.
  862. //     * <b>xtpTabAppearancePropertyPageSelected</b> Office 2000 selected appearance.
  863. //     * <b>xtpTabAppearanceStateButtons</b>         State Button appearance.
  864. //
  865. // See Also: XTPTabColorStyle, XTPTabAppearanceStyle, SetAppearance, GetAppearance, GetAppearanceSet,
  866. //           SetColor, GetColor, GetColorSet, SetColorSet, SetAppearanceSet
  867. //-------------------------------------------------------------------------
  868. class _XTP_EXT_CLASS CColorSetWinXP : public CColorSetDefault
  869. {
  870. public:
  871. //-------------------------------------------------------------------------
  872. // Summary:
  873. //     This member is called to refresh the visual metrics of the tabs.
  874. // Remarks:
  875. //     All of the color members are refreshed when this is called.
  876. //     This member can be override this member to change the colors of
  877. //     the color members.
  878. //-------------------------------------------------------------------------
  879. virtual void RefreshMetrics();
  880. //-----------------------------------------------------------------------
  881. // Summary:
  882. //     This member is called to fill a tab button.
  883. // Parameters:
  884. //     pDC    - Pointer to a valid device context.
  885. //     rcItem - Bounding rectangle of the tab button to fill.
  886. //     pItem  - Tab button to draw.
  887. // Returns:
  888. //     XTP_TABMANAGER_COLOR_NONE
  889. // Remarks:
  890. //     This member is used to fill all tab buttons except when the XTPTabAppearanceStyle is
  891. //     xtpTabAppearanceStateButtons.  xtpTabAppearanceStateButtons require
  892. //     the FillStateButton member.
  893. //
  894. //          If IsAppThemed is FALSE, then CColorSetDefault::FillPropertyButton
  895. //          is used.
  896. // See Also: FillStateButton
  897. //-----------------------------------------------------------------------
  898. virtual COLORREF FillPropertyButton(CDC* pDC, CRect rcItem, CXTPTabManagerItem* pItem);
  899. //-----------------------------------------------------------------------
  900. // Summary:
  901. //     This member is called to fill the TabClient area of the tab manager.
  902. // Parameters:
  903. //     pDC         - Pointer to a valid device context.
  904. //     rc          - Bounding rectangle of the tab client area.
  905. //     pTabManager - Fill the tab client area of this CXTPTabManager object.
  906. // Remarks:
  907. //     The TabClient bounding rectangle can be retrieved with the
  908. //     CXTPTabPaintManager::CAppearanceSet::GetClientRect,
  909. //     and CXTPTabManager::GetClientRect members.
  910. // Returns:
  911. //     If IsAppThemed is TRUE, then 0 is returned.
  912. //
  913. //     If IsAppThemed is FALSE and a tab is selected then the color from CXTPTabManager::GetItemColor
  914. //     for the currently selected tab is returned, otherwise CXTPTabPaintManager::CColorSet::m_clrButtonSelected is returned.
  915. //-----------------------------------------------------------------------
  916. virtual COLORREF FillClient(CDC* pDC, CRect rc, CXTPTabManager* pTabManager);
  917. //-----------------------------------------------------------------------
  918. // Summary:
  919. //     This method is called to protect client area to be drawn.
  920. // Parameters:
  921. //     pDC         - Pointer to a valid device context.
  922. //     rcClient    - Bounding rectangle of the TabClient area.  This will
  923. //                   be the clipping region for the device context.
  924. //     pTabManager - Pointer to the CXTPTabManager.
  925. //-----------------------------------------------------------------------
  926. virtual void SelectClipRgn(CDC* pDC, CRect rcClient, CXTPTabManager* pTabManager);
  927. //-----------------------------------------------------------------------
  928. // Summary:
  929. //     This member is called to fill the tab navigation buttons.
  930. // Parameters:
  931. //     pDC     - Pointer to a valid device context.
  932. //     pButton - Tab navigation button to fill.
  933. //     rc      - Bounding rectangle of the tab navigation button.
  934. // Remarks:
  935. //     This member takes care of filling the tab navigation buttons
  936. //     that are in the header of the TabClient.
  937. //     The XTPTabColorStyle CColorSet classes override this to perform
  938. //     actions such as painting the highlighting, pressed, and normal
  939. //     versions of the tab navigation buttons.
  940. //
  941. //     If IsAppThemed is FALSE, then CColorSetDefault::FillNavigationButton
  942. //     is used.
  943. //
  944. // See Also: CXTPTabManager::GetNavigateButton, CXTPTabManagerNavigateButton
  945. //-----------------------------------------------------------------------
  946. virtual void FillNavigateButton(CDC* pDC, CXTPTabManagerNavigateButton* pButton, CRect& rc);
  947. //-----------------------------------------------------------------------
  948. // Summary:
  949. //     This member is called to fill a tab button when the XTPTabAppearanceStyle is
  950. //     xtpTabAppearanceStateButtons.
  951. // Parameters:
  952. //     pDC    - Pointer to a valid device context.
  953. //     rcItem - Bounding rectangle of the tab button to fill.
  954. //     pItem  - Tab button to draw.
  955. // Remarks:
  956. //     This member is only used to fill buttons when the XTPTabAppearanceStyle is
  957. //     xtpTabAppearanceStateButtons, for all other buttons, FillPropertyButton is
  958. //     used.
  959. //
  960. //     If IsAppThemed is FALSE and/or the tab button is not selected, then
  961. //     CColorSetDefault::FillStateButton is used.
  962. //
  963. // See Also: FillPropertyButton
  964. //-----------------------------------------------------------------------
  965. virtual void FillStateButton(CDC* pDC, CRect rcItem, CXTPTabManagerItem* pItem);
  966. //-----------------------------------------------------------------------
  967. // Summary:
  968. //     The member is called to determine if this ColorSet supports
  969. //     Windows XP Themes and if a Windows XP Theme is enabled.
  970. // Returns:
  971. //     TRUE if Windows XP themes are enabled and a Windows XP theme
  972. //     is currently used.
  973. // Remarks:
  974. //     IsAppThemed will return FALSE if running an operating system
  975. //     before Windows XP i.e. (98, 2000, NT) or if the Standard/Clasic
  976. //     themes are used with Windows XP.
  977. //
  978. //     This member is called internally to determine how to colorize
  979. //     the tab buttons.  If FALSE, CXTPTabPaintManager::CColorSetDefault
  980. //     is used to colorize the tab buttons.  If TRUE, then Windows XP
  981. //     colorization is used to colorize the tabs.
  982. // See Also: CXTPTabPaintManager::IsAppThemed
  983. //-----------------------------------------------------------------------
  984. virtual BOOL IsAppThemed() const;
  985. private:
  986. typedef void (AFX_CDECL* LPFNDRAWROTATEDBITS)(int cx, int cy, UINT* pSrcBits, UINT* pDestBits);
  987. //{{AFX_CODEJOCK_PRIVATE
  988. public:
  989. void DrawRotatedButton(CDC* pDC, CRect rcItem, CXTPTabManagerItem* pItem, BOOL bSwap, LPFNDRAWROTATEDBITS pfnRotatedProc);
  990. static void AFX_CDECL DrawRotatedBitsBottom(int cx, int cy, UINT* pSrcBits, UINT* pDestBits);
  991. static void AFX_CDECL DrawRotatedBitsRight(int cx, int cy, UINT* pSrcBits, UINT* pDestBits);
  992. static void AFX_CDECL DrawRotatedBitsLeft(int cx, int cy, UINT* pSrcBits, UINT* pDestBits);
  993. static void AFX_CDECL DrawRotatedBitsInvertRight(int cx, int cy, UINT* pSrcBits, UINT* pDestBits);
  994. //}}AFX_CODEJOCK_PRIVATE
  995. protected:
  996. CXTPWinThemeWrapper m_themeTabButton;   // Internally used helper to draw PropertyPage Buttons using Windows XP color set.
  997. CXTPWinThemeWrapper m_themeToolbar;     // Internally used helper to draw State Button using Windows XP color set.
  998. };
  999. //-------------------------------------------------------------------------
  1000. // Summary:
  1001. //     CColorSetWhidbey is a CColorSetOffice2003 derived class that represents the
  1002. //     Visual Studio 2005 "Whidbey" tab color set.
  1003. // Remarks:
  1004. //     To use the Visual Studio 2005 "Whidbey" color set, SetColor is used to apply
  1005. //     the xtpTabColorWhidbey XTPTabColorStyle.
  1006. //
  1007. //     The following appearances (XTPTabAppearanceStyle) support CColorSetWhidbey:
  1008. //     * <b>xtpTabAppearancePropertyPage2003</b> Office 2003 appearance.
  1009. //     * <b>xtpTabAppearanceStateButtons</b>     State Button appearance.
  1010. //
  1011. // See Also: XTPTabColorStyle, XTPTabAppearanceStyle, SetAppearance, GetAppearance, GetAppearanceSet,
  1012. //           SetColor, GetColor, GetColorSet, SetColorSet, SetAppearanceSet
  1013. //-------------------------------------------------------------------------
  1014. class _XTP_EXT_CLASS CColorSetWhidbey : public CColorSetOffice2003
  1015. {
  1016. public:
  1017. //-----------------------------------------------------------------------
  1018. // Summary:
  1019. //     Constructs a CColorSetWhidbey object.
  1020. //-----------------------------------------------------------------------
  1021. CColorSetWhidbey();
  1022. public:
  1023. //-----------------------------------------------------------------------
  1024. // Summary:
  1025. //     This member is called to refresh the visual metrics of the tabs.
  1026. // Remarks:
  1027. //     All of the color members are refreshed when this is called.
  1028. //     This member can be override this member to change the colors of
  1029. //     the color members.
  1030. //-----------------------------------------------------------------------
  1031. void RefreshMetrics();
  1032. //-----------------------------------------------------------------------
  1033. // Summary:
  1034. //     This member is called to fill a tab button.
  1035. // Parameters:
  1036. //     pDC    - Pointer to a valid device context.
  1037. //     rcItem - Bounding rectangle of the tab button to fill.
  1038. //     pItem  - Tab button to draw.
  1039. // Returns:
  1040. //     COLORREF returned from CXTPTabManager::GetItemColor(pItem).
  1041. // Remarks:
  1042. //     This member is used to fill all tab buttons except when the XTPTabAppearanceStyle is
  1043. //     xtpTabAppearanceStateButtons.  xtpTabAppearanceStateButtons require
  1044. //     the FillStateButton member.
  1045. //
  1046. //     If m_bGradientButton is TRUE, then CColorSetOffice2003::FillPropertyButton
  1047. //     is used to fill the tab button with a gradient fill. See
  1048. //     CColorSetOffice2003::FillPropertyButton for details.
  1049. //
  1050. //     If m_bGradientButton is FALSE then CColorSet::FillPropertyButton is used.
  1051. //
  1052. // See Also: m_bGradientButton
  1053. //-----------------------------------------------------------------------
  1054. COLORREF FillPropertyButton(CDC* pDC, CRect rcItem, CXTPTabManagerItem* pItem);
  1055. protected:
  1056. BOOL m_bGradientButton;         // TRUE if luna colors are enabled.  This will be TRUE when using Windows XP and the current system theme is xtpSystemThemeSilver, xtpSystemThemeOlive, or xtpSystemThemeOlive, FALSE otherwise.
  1057. };
  1058. //-------------------------------------------------------------------------
  1059. // Summary:
  1060. //     CColorSetVisualStudio2008 is a CColorSetOffice2003 derived class that represents the
  1061. //     Visual Studio 2008 tab color set.
  1062. // Remarks:
  1063. //     To use the Visual Studio 2008 color set, SetColor is used to apply
  1064. //     the xtpTabColorWhidbey XTPTabColorStyle.
  1065. //
  1066. //     The following appearances (XTPTabAppearanceStyle) support CColorSetWhidbey:
  1067. //     * <b>xtpTabAppearancePropertyPage2003</b> Office 2003 appearance.
  1068. //     * <b>xtpTabAppearanceStateButtons</b>     State Button appearance.
  1069. //
  1070. // See Also: XTPTabColorStyle, XTPTabAppearanceStyle, SetAppearance, GetAppearance, GetAppearanceSet,
  1071. //           SetColor, GetColor, GetColorSet, SetColorSet, SetAppearanceSet
  1072. //-------------------------------------------------------------------------
  1073. class _XTP_EXT_CLASS CColorSetVisualStudio2008 : public CColorSetOffice2003
  1074. {
  1075. public:
  1076. //-----------------------------------------------------------------------
  1077. // Summary:
  1078. //     Constructs a CColorSetVisualStudio2008 object.
  1079. //-----------------------------------------------------------------------
  1080. CColorSetVisualStudio2008();
  1081. public:
  1082. //-----------------------------------------------------------------------
  1083. // Summary:
  1084. //     This member is called to refresh the visual metrics of the tabs.
  1085. // Remarks:
  1086. //     All of the color members are refreshed when this is called.
  1087. //     This member can be override this member to change the colors of
  1088. //     the color members.
  1089. //-----------------------------------------------------------------------
  1090. void RefreshMetrics();
  1091. //-----------------------------------------------------------------------
  1092. // Summary:
  1093. //     This member is called to fill a tab button.
  1094. // Parameters:
  1095. //     pDC    - Pointer to a valid device context.
  1096. //     rcItem - Bounding rectangle of the tab button to fill.
  1097. //     pItem  - Tab button to draw.
  1098. // Returns:
  1099. //     COLORREF returned from CXTPTabManager::GetItemColor(pItem).
  1100. // Remarks:
  1101. //     This member is used to fill all tab buttons except when the XTPTabAppearanceStyle is
  1102. //     xtpTabAppearanceStateButtons.  xtpTabAppearanceStateButtons require
  1103. //     the FillStateButton member.
  1104. //
  1105. //     If m_bGradientButton is TRUE, then CColorSetOffice2003::FillPropertyButton
  1106. //     is used to fill the tab button with a gradient fill. See
  1107. //     CColorSetOffice2003::FillPropertyButton for details.
  1108. //
  1109. //     If m_bGradientButton is FALSE then CColorSet::FillPropertyButton is used.
  1110. //
  1111. // See Also: m_bGradientButton
  1112. //-----------------------------------------------------------------------
  1113. COLORREF FillPropertyButton(CDC* pDC, CRect rcItem, CXTPTabManagerItem* pItem);
  1114. protected:
  1115. BOOL m_bGradientButton;         // TRUE if luna colors are enabled.  This will be TRUE when using Windows XP and the current system theme is xtpSystemThemeSilver, xtpSystemThemeOlive, or xtpSystemThemeOlive, FALSE otherwise.
  1116. };
  1117. //////////////////////////////////////////////////////////////////////////
  1118. /// CAppearanceSet
  1119. //-------------------------------------------------------------------------
  1120. // Summary:
  1121. //     CAppearanceSet is a class that represents the appearance of all the
  1122. //     components (tab button, tab caption font, button size, tab margins, etc)
  1123. //     of the tab manager.
  1124. // Remarks:
  1125. //     CAppearanceSet is the base class for all appearances.  To create a custom
  1126. //     appearance, and new class can be derived from the base class or any of
  1127. //     the appearances.
  1128. //
  1129. //     The appearance should be updated in the RefreshMetrics member's for each
  1130. //     CAppearanceSet object.
  1131. // See Also: XTPTabAppearanceStyle, SetAppearance, SetAppearanceSet, GetAppearance,
  1132. //           GetAppearanceSet, SetColor, GetColor, GetColorSet, SetColorSet, CColorSet
  1133. //-------------------------------------------------------------------------
  1134. class _XTP_EXT_CLASS CAppearanceSet
  1135. {
  1136. public:
  1137. //-------------------------------------------------------------------------
  1138. // Summary:
  1139. //     Constructs a CAppearanceSet object.
  1140. //-------------------------------------------------------------------------
  1141. CAppearanceSet();
  1142. //-------------------------------------------------------------------------
  1143. // Summary:
  1144. //     Destroys a CAppearanceSet object, handles cleanup and deallocation.
  1145. //-------------------------------------------------------------------------
  1146. virtual ~CAppearanceSet();
  1147. public:
  1148. //-----------------------------------------------------------------------
  1149. // Summary:
  1150. //     This member is called to refresh the appearance metrics.
  1151. // Remarks:
  1152. //     This member is used to refresh the appearance metrics such
  1153. //     as font, button height, margin size, etc.  Override this
  1154. //     member in derived classes to change the appearance metrics.
  1155. // See Also: CXTPTabPaintManager::SetFontIndirect, GetHeaderMargin, GetClientMargin, GetButtonLength, GetButtonHeight
  1156. //-----------------------------------------------------------------------
  1157. virtual void RefreshMetrics();
  1158. //-----------------------------------------------------------------------
  1159. // Summary:
  1160. //     Call this member to get the currently used color set.
  1161. // Returns:
  1162. //     Currently used custom color set.
  1163. // See Also: XTPTabColorStyle, CXTPTabPaintManager::GetColor, CXTPTabPaintManager::SetColorSet, CXTPTabPaintManager::SetColor
  1164. //-----------------------------------------------------------------------
  1165. CColorSet* GetColorSet()
  1166. {
  1167. return m_pPaintManager->m_pColorSet;
  1168. }
  1169. //-----------------------------------------------------------------------
  1170. // Summary:
  1171. //     Call this member to get the bounding rectangle to the tab
  1172. //     header area.
  1173. // Parameters:
  1174. //     rcControl   - Bounding rectangle of the tab header.
  1175. //                   See CXTPTabManager::GetControlRect.
  1176. //     pTabManager - Pointer to tab manager.
  1177. // Returns:
  1178. //     Bounding rectangle of tab header area.
  1179. // See Also: GetClientRect, GetHeaderMargin, GetClientMargin, CXTPTabManager::GetControlRect
  1180. //-----------------------------------------------------------------------
  1181. virtual CRect GetHeaderRect(CRect rcControl, CXTPTabManager* pTabManager);
  1182. // Summary:
  1183. //     Call this member to get the height of the tab
  1184. //     header area.
  1185. // Parameters:
  1186. //     pTabManager - Pointer to tab manager.
  1187. // Returns:
  1188. //     Height of tab header area.
  1189. // See Also: GetHeaderRect, GetClientRect, GetHeaderMargin, GetClientMargin, CXTPTabManager::GetControlRect
  1190. //-----------------------------------------------------------------------
  1191. int GetHeaderHeight(CXTPTabManager* pTabManager);
  1192. //-----------------------------------------------------------------------
  1193. // Summary:
  1194. //     Call this member to get the bounding rectangle to the tab
  1195. //     client area.
  1196. // Parameters:
  1197. //     rcControl   - Bounding rectangle of the tab manager control.
  1198. //                   See CXTPTabManager::GetControlRect.
  1199. //     pTabManager - Pointer to tab manager.
  1200. // Returns:
  1201. //     Bounding rectangle of tab client area.
  1202. // See Also: GetHeaderRect, GetHeaderMargin, GetClientMargin, CXTPTabManager::GetControlRect
  1203. //-----------------------------------------------------------------------
  1204. virtual CRect GetClientRect(CRect rcControl, CXTPTabManager* pTabManager);
  1205. //-----------------------------------------------------------------------
  1206. // Summary:
  1207. //     This method is called to get the top, left, right, and bottom
  1208. //     tab header margins.
  1209. // Returns:
  1210. //     CRect struct containing the left, top, right, and bottom margins
  1211. //     of the tab header.  This is the margin (space) placed around the
  1212. //     tab buttons inside the tab header.
  1213. //
  1214. // Remarks:
  1215. //     The CRect structure will contain the margins of the tab header.
  1216. //     m_rcHeaderMargin contains these margins.
  1217. //
  1218. //     This is the margin placed around the tab buttons in the tab header.
  1219. //     This is not placed around each tab button, but all the tab buttons.
  1220. //
  1221. // Example:
  1222. // <code>
  1223. // // Set the top, left, right, and bottom tab header margins to 5 pixels.  This will
  1224. // // place a margin of 5 pixels around the tab buttons in the tab header.
  1225. // m_wndTabControl.GetPaintManager()->GetAppearanceSet()->m_rcHeaderMargin.SetRect(5, 5, 5, 5);
  1226. //
  1227. // // Set the top, left, right, and bottom tab control margins to 4 pixels.  This will
  1228. // // place a margin of 4 pixels around the entire tab control (Includes tab header and tab client area).
  1229. // m_wndTabControl.GetPaintManager()->m_rcControlMargin.SetRect(4, 4, 4, 4);
  1230. //
  1231. // // Set the top, left, right, and bottom tab button margins to 2 pixels.  This will
  1232. // // place a margin of 2 pixels around the text and icon in the tab buttons.
  1233. // m_wndTabControl.GetPaintManager()->m_rcButtonMargin.SetRect(2, 2, 2, 2);
  1234. //
  1235. // // Set the top, left, right, and bottom tab client margins to 10 pixels.  This will
  1236. // // place a margin of 10 pixels around the tab client area.
  1237. // m_wndTabControl.GetPaintManager()->m_rcClientMargin.SetRect(10, 10, 10, 10);
  1238. // </code>
  1239. // See Also: m_rcHeaderMargin, GetHeaderRect
  1240. //-----------------------------------------------------------------------
  1241. virtual CRect GetHeaderMargin();
  1242. //-----------------------------------------------------------------------
  1243. // Summary:
  1244. //     This method is called to get the top, left, right, and bottom
  1245. //     tab client area margins.
  1246. // Returns:
  1247. //     CRect struct containing the left, top, right, and bottom margins
  1248. //     of the tab client area.  This is the margin (space) placed around the
  1249. //     tab client area inside the tab control.
  1250. //
  1251. // Remarks:
  1252. //     The CRect structure will contain the margins of the tab client area.
  1253. //     CXTPTabPaintManager::m_rcClientMargin contains these margins.
  1254. //
  1255. //     This is the margin placed around the tab client area in the tab control.
  1256. //
  1257. // Example:
  1258. // <code>
  1259. // // Set the top, left, right, and bottom tab header margins to 5 pixels.  This will
  1260. // // place a margin of 5 pixels around the tab buttons in the tab header.
  1261. // m_wndTabControl.GetPaintManager()->GetAppearanceSet()->m_rcHeaderMargin.SetRect(5, 5, 5, 5);
  1262. //
  1263. // // Set the top, left, right, and bottom tab control margins to 4 pixels.  This will
  1264. // // place a margin of 4 pixels around the entire tab control (Includes tab header and tab client area).
  1265. // m_wndTabControl.GetPaintManager()->m_rcControlMargin.SetRect(4, 4, 4, 4);
  1266. //
  1267. // // Set the top, left, right, and bottom tab button margins to 2 pixels.  This will
  1268. // // place a margin of 2 pixels around the text and icon in the tab buttons.
  1269. // m_wndTabControl.GetPaintManager()->m_rcButtonMargin.SetRect(2, 2, 2, 2);
  1270. //
  1271. // // Set the top, left, right, and bottom tab client margins to 10 pixels.  This will
  1272. // // place a margin of 10 pixels around the tab client area.
  1273. // m_wndTabControl.GetPaintManager()->m_rcClientMargin.SetRect(10, 10, 10, 10);
  1274. // </code>
  1275. // See Also: CXTPTabPaintManager::m_rcClientMargin, GetClientRect
  1276. //-----------------------------------------------------------------------
  1277. virtual CRect GetClientMargin();
  1278. //-----------------------------------------------------------------------
  1279. // Summary:
  1280. //     This member is called to get the total button length including
  1281. //     the left and right button margin.
  1282. // Parameters:
  1283. //     pDC   - Pointer to a valid device context.
  1284. //     pItem - Pointer to tab button to get the length of.
  1285. // Returns:
  1286. //     Tab button length including the left and right button margin.
  1287. // Remarks:
  1288. //     This members calls CXTPTabPaintManager::DrawSingleButtonIconAndText
  1289. //     with bDraw = FALSE to get the total button length including margins.
  1290. // See Also: CXTPTabPaintManager::m_rcButtonMargin, GetClientMargin, GetHeaderMargin, CXTPTabPaintManager::DrawSingleButtonIconAndText, CXTPTabManager::GetItemMetrics, GetButtonHeight
  1291. //-----------------------------------------------------------------------
  1292. virtual int GetButtonLength(CDC* pDC, CXTPTabManagerItem* pItem);
  1293. //-----------------------------------------------------------------------
  1294. // Summary:
  1295. //     This member is called to determine the total height of the tab buttons
  1296. //     including the top and bottom margins and icon size.
  1297. // Parameters:
  1298. //     pTabManager - Pointer to the tab manager to get the button height.
  1299. // Returns:
  1300. //     The height of the tab buttons.
  1301. // Remarks:
  1302. //     This member add the size of the left and right margins and the
  1303. //     icon size to the size of CXTPTabPaintManager.CAppearanceSet.m_nButtonHeight,
  1304. //     which is the current height of the tabs without margins and icon size.
  1305. // See Also: CXTPTabPaintManager.CAppearanceSet.m_nButtonHeight, CXTPTabPaintManager::m_rcButtonMargin, GetClientMargin, GetHeaderMargin, CXTPTabPaintManager::DrawSingleButtonIconAndText, CXTPTabManager::GetItemMetrics, GetButtonLength
  1306. //-----------------------------------------------------------------------
  1307. virtual int GetButtonHeight(const CXTPTabManager* pTabManager);
  1308. //-----------------------------------------------------------------------
  1309. // Summary:
  1310. //     This method called to get bounding rectangle of item that was drawn
  1311. // Parameters:
  1312. //     pItem - Item to test
  1313. // Returns: Bounding rectangle of drawing item
  1314. // See Also: CXTPTabManagerItem::GetRect
  1315. //-----------------------------------------------------------------------
  1316. virtual CRect GetButtonDrawRect(const CXTPTabManagerItem* pItem);
  1317. public:
  1318. //-----------------------------------------------------------------------
  1319. // Summary:
  1320. //     This member is called to draw the tab control.
  1321. // Parameters:
  1322. //     pTabManager - Pointer to the tab manager to draw.
  1323. //     pDC         - Pointer to a valid device context.
  1324. //     rcControl   - Bounding rectangle of the client area.
  1325. // Remarks:
  1326. //     This member is called in various Draw and Paint functions.
  1327. //
  1328. //     Unless overridden, this member will just call
  1329. //     CXTPTabPaintManager::DrawTabControlEx.
  1330. // See Also: CXTPTabPaintManager::DrawTabControlEx.
  1331. //-----------------------------------------------------------------------
  1332. virtual void DrawTabControl(CXTPTabManager* pTabManager, CDC* pDC, CRect rcControl);
  1333. //-----------------------------------------------------------------------
  1334. // Summary:
  1335. //     This member fills in the tab header and tab client area.  It
  1336. //     will then draw tab client frame.
  1337. // Parameters:
  1338. //     pTabManager - Pointer to tab manager to fill.
  1339. //     pDC         - Pointer to a valid device context.
  1340. //     rcControl   - Bounding rectangle of the tab manager control.
  1341. //                   See CXTPTabManager::GetControlRect.
  1342. // Returns:
  1343. //     Tab header bounding rectangle.  This value is returned from GetHeaderRect.
  1344. // Remarks:
  1345. //     If CXTPTabPaintManager::m_bFillBackground is TRUE, then the tab client
  1346. //     space is filled using CXTPTabPaintManager::CColorSet::m_clrControlFace color.
  1347. //     CXTPTabPaintManager::m_bFillBackground is only FALSE when drawing
  1348. //     DockingPanePanel AutoHide tabs because there is no client area to draw.
  1349. // See Also: GetHeaderRect, CXTPTabPaintManager::m_bFillBackground, XTPTabClientFrame, CXTPTabPaintManager::m_clientFrame
  1350. //-----------------------------------------------------------------------
  1351. virtual CRect FillTabControl(CXTPTabManager* pTabManager, CDC* pDC, CRect rcControl);
  1352. //-----------------------------------------------------------------------
  1353. // Summary:
  1354. //     This method is called to move the tab buttons of the tab control to their
  1355. //     correct positions.
  1356. // Parameters:
  1357. //     pTabManager - Pointer to the tab manager the tab button are on.
  1358. //     pDC         - Pointer to a valid device context.
  1359. //     rcClient    - Bounding rectangle of the tab client area.
  1360. // Remarks:
  1361. //     CXTPTabPaintManager::RepositionTabControl and CXTPTabPaintManager::AdjustClientRect
  1362. //     are called when the window is resized.  When DrawTabControl is called
  1363. //     the changes will be used when drawing the tab control.
  1364. //
  1365. //     This member is called by CXTPTabPaintManager::RepositionTabControl.
  1366. //     Unless overridden this member will just call CXTPTabPaintManager::RepositionTabControlEx.
  1367. //-----------------------------------------------------------------------
  1368. virtual void RepositionTabControl(CXTPTabManager* pTabManager, CDC* pDC, CRect rcClient);
  1369. //-----------------------------------------------------------------------
  1370. // Summary:
  1371. //     This member is called to adjust the tab client rectangle.  It will
  1372. //     return the new tab client rectangle with margins included.
  1373. // Parameters:
  1374. //     pTabManager - Pointer to the tab manager to adjust the tab client rectangle.
  1375. //     rcClient    - [out] CRect to store tab client rectangle.
  1376. // Remarks:
  1377. //     CXTPTabPaintManager::AdjustClientRect and CXTPTabPaintManager::RepositionTabControl
  1378. //     are called when the window is resized.  When CXTPTabPaintManager::DrawTabControl
  1379. //     is called the changes will be used when drawing the tab control.
  1380. //
  1381. //     This member will adjust the tab client rectangle based on the
  1382. //     currently set XTPTabClientFrame.
  1383. //
  1384. //     Then CXTPTabPaintManager::AdjustClientRect calls this member
  1385. //     if there is one or more tab in the tab manager.
  1386. // See Also:
  1387. //     CXTPTabPaintManager::AdjustClientRect
  1388. //-----------------------------------------------------------------------
  1389. virtual void AdjustClientRect(CXTPTabManager* pTabManager, CRect& rcClient);
  1390. //-----------------------------------------------------------------------
  1391. // Summary:
  1392. //     This method is called to draw a single tab button in the tab
  1393. //     client header area.
  1394. // Parameters:
  1395. //     pDC   - Pointer to a valid device context.
  1396. //     pItem - Tab button to draw.
  1397. // Remarks:
  1398. //     This method is overridden in derived classes and will draw a
  1399. //     single tab button.  This method only draws the button, no text
  1400. //     or icon is added.
  1401. //
  1402. //     DrawSingleButton calls CXTPTabPaintManager::DrawSingleButtonIconAndText
  1403. //     after the button is drawn.  This is called to draw the button's
  1404. //     icon and text.
  1405. // See Also:: CXTPTabPaintManager::DrawTabControlEx, CXTPTabPaintManager::DrawSingleButtonIconAndText
  1406. //-----------------------------------------------------------------------
  1407. virtual void DrawSingleButton(CDC* pDC, CXTPTabManagerItem* pItem);
  1408. //-----------------------------------------------------------------------
  1409. // Summary:
  1410. //     This member is called to draw the different parts that make up
  1411. //     the TabMDIClient TabWorkSpace.
  1412. // Parameters:
  1413. //     pDC    - Pointer to a valid device context.
  1414. //     lpRect - Size of splitter.
  1415. //     workspacePart  - XTPTabWorkspacePart to draw.
  1416. // Remarks:
  1417. //     This is used when drawing the TabWorkspace of MDI tabs when
  1418. //     tab grouping is enabled.
  1419. //
  1420. //     lpRect is the size of the splitter that is placed between the
  1421. //     vertical or horizontal tab groups if workspacePart is
  1422. //     XTPTabWorkspacePartHSplitter or XTPTabWorkspacePartVSplitter.  And
  1423. //     the splitter will be drawn with lpRect.
  1424. //
  1425. //     If workspacePart is XTPTabWorkspacePartWidth, then this is the size
  1426. //     of the splitter.
  1427. // See Also: XTPTabWorkspacePart
  1428. //-----------------------------------------------------------------------
  1429. virtual void DrawWorkspacePart(CDC* pDC, LPRECT lpRect, XTPTabWorkspacePart workspacePart);
  1430. //-----------------------------------------------------------------------
  1431. // Summary:
  1432. //     Call this member to retrieve all the supported XTPTabColorStyle
  1433. //     for this appearance.
  1434. // Returns:
  1435. //     xtpTabColorDefault | xtpTabColorVisualStudio | xtpTabColorOffice2003 | xtpTabColorWinXP | xtpTabColorWhidbey
  1436. // See Also: GetDefaultColorSet
  1437. //-----------------------------------------------------------------------
  1438. virtual int GetSupportedColorSets() { return xtpTabColorDefault | xtpTabColorVisualStudio | xtpTabColorOffice2003 | xtpTabColorWinXP | xtpTabColorWhidbey | xtpTabColorVisualStudio2008; }
  1439. //-----------------------------------------------------------------------
  1440. // Summary:
  1441. //     Call this member to get the default XTPTabColorStyle for this appearance.
  1442. // Returns:
  1443. //     xtpTabColorDefault
  1444. // See Also: GetSupportedColorSets
  1445. //-----------------------------------------------------------------------
  1446. virtual XTPTabColorStyle GetDefaultColorSet() { return xtpTabColorDefault; }
  1447. public:
  1448. //-----------------------------------------------------------------------
  1449. // Summary:
  1450. //     This helper method an be called to draw item inside polygon rectangle
  1451. // Parameters:
  1452. //     pDC - Pointer to device context to draw
  1453. //     pItem - Tab item to draw
  1454. //     pts - Array of points that specified rectangle
  1455. //     nCount - Total number of point in rectangle
  1456. //     tabPosition - Tab position
  1457. //     bAbsoulute - Flag that specified if points specified absolute coordinates
  1458. // Returns:
  1459. //     Color of tab was filled
  1460. //-----------------------------------------------------------------------
  1461. COLORREF FillButton(CDC* pDC, CXTPTabManagerItem* pItem, LPPOINT pts, int nCount, XTPTabPosition tabPosition, BOOL bAbsoulute = FALSE);
  1462. //{{AFX_CODEJOCK_PRIVATE
  1463. static void AFX_CDECL DrawPolyLine(CDC* pDC, COLORREF clr, LPPOINT pts, int nCount);
  1464. static void AFX_CDECL DrawSingleLineBorder(CDC* pDC, CRect rc, XTPTabPosition position, COLORREF clrTopLeft, COLORREF clrBottomRight);
  1465. static void AFX_CDECL InflateRectEx(CRect& rc, CRect rcInflate, XTPTabPosition position);
  1466. static void AFX_CDECL DeflateRectEx(CRect& rc, CRect rcDeflate, XTPTabPosition position);
  1467. //}}AFX_CODEJOCK_PRIVATE
  1468. public:
  1469. CRect m_rcHeaderMargin;                 // CRect struct containing the left, top, right, and bottom margins of the tab header.  This is the margin (space) placed around the tab buttons inside the tab header.
  1470. int   m_nRowMargin;                     // Margin between rows
  1471. protected:
  1472. int m_nButtonHeight;                    // Current tab button height (without margins).
  1473. CXTPTabPaintManager* m_pPaintManager;   // Self paint manager pointer.
  1474. BOOL m_bButtonsReverseZOrder;           // Draw buttons in right to left order.
  1475. friend class CXTPTabPaintManager;
  1476. };
  1477. //-------------------------------------------------------------------------
  1478. // Summary:
  1479. //     CAppearanceSetPropertyPage is a CAppearanceSet derived class that represents the
  1480. //     Office 2000 tab appearance.
  1481. // Remarks:
  1482. //     To use the Office 2000 appearance, SetAppearance is used to apply
  1483. //     the xtpTabAppearancePropertyPage XTPTabAppearanceStyle.
  1484. //
  1485. //     CAppearanceSetPropertyPage supports the following XTPTabColorStyle:
  1486. //     * <b>xtpTabColorDefault</b>    Default color style.
  1487. //     * <b>xtpTabColorOffice2003</b> Office 2003 color style.
  1488. //     * <b>xtpTabColorWinXP</b>      Windows XP color style.
  1489. //
  1490. // See Also: XTPTabColorStyle, XTPTabAppearanceStyle, SetAppearance, GetAppearance, GetAppearanceSet,
  1491. //           SetColor, GetColor, GetColorSet, SetColorSet, SetAppearanceSet
  1492. //-------------------------------------------------------------------------
  1493. class _XTP_EXT_CLASS CAppearanceSetPropertyPage : public CAppearanceSet
  1494. {
  1495. public:
  1496. //-------------------------------------------------------------------------
  1497. // Summary:
  1498. //     Constructs a CAppearanceSetPropertyPage object.
  1499. //-------------------------------------------------------------------------
  1500. CAppearanceSetPropertyPage()
  1501. {
  1502. m_rcHeaderMargin.SetRect(2, 3, 6, 0);
  1503. }
  1504. //-------------------------------------------------------------------------
  1505. // Summary:
  1506. //     This member is called to refresh the appearance metrics.
  1507. // Remarks:
  1508. //     This member is used to refresh the appearance metrics such
  1509. //     as font, button height, margin size, etc.  Override this
  1510. //     member to change the appearance metrics.
  1511. // See Also:
  1512. //     CXTPTabPaintManager::SetFontIndirect, CXTPTabPaintManager::CAppearanceSet::GetHeaderMargin,
  1513. //     CXTPTabPaintManager::CAppearanceSet::GetHeaderMargin::GetClientMargin,
  1514. //     CXTPTabPaintManager::CAppearanceSet::GetHeaderMargin::GetButtonLength,
  1515. //     CXTPTabPaintManager::CAppearanceSet::GetHeaderMargin::GetButtonHeight
  1516. //-------------------------------------------------------------------------
  1517. virtual void RefreshMetrics();
  1518. //-----------------------------------------------------------------------
  1519. // Summary:
  1520. //     This method is called to draw a single tab button in the tab
  1521. //     client header area.
  1522. // Parameters:
  1523. //     pDC   - Pointer to a valid device context.
  1524. //     pItem - Tab button to draw.
  1525. // Remarks:
  1526. //     This method will draw a single tab button.  This method only
  1527. //     draws the button, no text or icon is added.
  1528. //
  1529. //          DrawSingleButton calls CXTPTabPaintManager::DrawSingleButtonIconAndText
  1530. //          after the button is drawn.  This is called to draw the button's
  1531. //          icon and text.
  1532. // See Also:: CXTPTabPaintManager::DrawTabControlEx, CXTPTabPaintManager::DrawSingleButtonIconAndText
  1533. //-----------------------------------------------------------------------
  1534. virtual void DrawSingleButton(CDC* pDC, CXTPTabManagerItem* pItem);
  1535. //-----------------------------------------------------------------------
  1536. // Summary:
  1537. //     This member fills in the tab header and tab client area.  It
  1538. //     will then draw tab client frame.
  1539. // Parameters:
  1540. //     pTabManager - Pointer to tab manager to fill.
  1541. //     pDC         - Pointer to a valid device context.
  1542. //     rcControl   - Bounding rectangle of the tab manager control.
  1543. //                   See CXTPTabManager::GetControlRect.
  1544. // Returns:
  1545. //     Tab header bounding rectangle.  This value is returned from GetHeaderRect.
  1546. // Remarks:
  1547. //     If CXTPTabPaintManager::m_bFillBackground is TRUE, then the tab client
  1548. //     space is filled using CXTPTabPaintManager::CColorSet::m_clrControlFace color.
  1549. //     CXTPTabPaintManager::m_bFillBackground is only FALSE when drawing
  1550. //     DockingPanePanel AutoHide tabs because there is no client area to draw.
  1551. // See Also: CXTPTabPaintManager::CAppearanceSet::GetHeaderRect, CXTPTabPaintManager::m_bFillBackground, XTPTabClientFrame, CXTPTabPaintManager::m_clientFrame
  1552. //-----------------------------------------------------------------------
  1553. virtual CRect FillTabControl(CXTPTabManager* pTabManager, CDC* pDC, CRect rcControl);
  1554. //-----------------------------------------------------------------------
  1555. // Summary:
  1556. //     Call this member to retrieve all the supported XTPTabColorStyle
  1557. //     for this appearance.
  1558. // Returns:
  1559. //     xtpTabColorDefault | xtpTabColorOffice2003 | xtpTabColorWinXP
  1560. // See Also: GetDefaultColorSet
  1561. //-----------------------------------------------------------------------
  1562. virtual int GetSupportedColorSets() { return xtpTabColorDefault | xtpTabColorOffice2003 | xtpTabColorWinXP; }
  1563. //-----------------------------------------------------------------------
  1564. // Summary:
  1565. //     Call this member to get the default XTPTabColorStyle for this appearance.
  1566. // Returns:
  1567. //     xtpTabColorDefault
  1568. // See Also: GetSupportedColorSets
  1569. //-----------------------------------------------------------------------
  1570. virtual XTPTabColorStyle GetDefaultColorSet() { return xtpTabColorDefault; }
  1571. //-----------------------------------------------------------------------
  1572. // Summary:
  1573. //     This method is called to get the top, left, right, and bottom
  1574. //     tab client area margins.
  1575. // Returns:
  1576. //     CRect struct containing the left, top, right, and bottom margins
  1577. //     of the tab client area.  This is the margin (space) placed around the
  1578. //     tab client area inside the tab control.
  1579. //
  1580. // Remarks:
  1581. //     The CRect structure will contain the margins of the tab client area.
  1582. //     CXTPTabPaintManager::m_rcClientMargin contains these margins.
  1583. //
  1584. //     This is the margin placed around the tab client area in the tab control.
  1585. //
  1586. // Example:
  1587. // <code>
  1588. // // Set the top, left, right, and bottom tab header margins to 5 pixels.  This will
  1589. // // place a margin of 5 pixels around the tab buttons in the tab header.
  1590. // m_wndTabControl.GetPaintManager()->GetAppearanceSet()->m_rcHeaderMargin.SetRect(5, 5, 5, 5);
  1591. //
  1592. // // Set the top, left, right, and bottom tab control margins to 4 pixels.  This will
  1593. // // place a margin of 4 pixels around the entire tab control (Includes tab header and tab client area).
  1594. // m_wndTabControl.GetPaintManager()->m_rcControlMargin.SetRect(4, 4, 4, 4);
  1595. //
  1596. // // Set the top, left, right, and bottom tab button margins to 2 pixels.  This will
  1597. // // place a margin of 2 pixels around the text and icon in the tab buttons.
  1598. // m_wndTabControl.GetPaintManager()->m_rcButtonMargin.SetRect(2, 2, 2, 2);
  1599. //
  1600. // // Set the top, left, right, and bottom tab client margins to 10 pixels.  This will
  1601. // // place a margin of 10 pixels around the tab client area.
  1602. // m_wndTabControl.GetPaintManager()->m_rcClientMargin.SetRect(10, 10, 10, 10);
  1603. // </code>
  1604. // See Also: CXTPTabPaintManager::m_rcClientMargin, CXTPTabPaintManager::CAppearanceSet::GetHeaderMargin,
  1605. //-----------------------------------------------------------------------
  1606. virtual CRect GetClientMargin();