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

对话框与窗口

开发平台:

Visual C++

  1. // XTPTaskPanelPaintManager.h interface for the CXTPTaskPanelPaintManager class.
  2. //
  3. // This file is a part of the XTREME TASKPANEL 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(__XTPTASKPANELPAINTMANAGER_H__)
  22. #define __XTPTASKPANELPAINTMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPTaskPanel;
  28. class CXTPTaskPanelGroupItem;
  29. class CXTPTaskPanelScrollButton;
  30. #include "Common/XTPColorManager.h"
  31. //-----------------------------------------------------------------------
  32. // Summary:
  33. //     Structure used to store task panel group colorization information for
  34. //     various  parts of the group.
  35. // Example:
  36. // <code>
  37. //      m_wndTaskPanel.GetPaintManager()->GetGroupColors(FALSE)->clrClientLink = RGB(0, 0, 255);
  38. // </code>
  39. // See Also:
  40. //     CXTPTaskPanelPaintManager::GetGroupColors, CXTPTaskPanelPaintManager::m_groupNormal,
  41. //     CXTPTaskPanelPaintManager::m_groupSpecial
  42. //-----------------------------------------------------------------------
  43. struct XTP_TASKPANEL_GROUPCOLORS
  44. {
  45. CXTPPaintManagerColorGradient clrHead;       // Color gradient used for the background color of group headers.
  46. CXTPPaintManagerColorGradient clrClient;             // Background color of the client area of the group.  This is the group area under group header.
  47. CXTPPaintManagerColor clrClientBorder;       // Color of the client group border.  This is the group area under group header.
  48. double dHeadGradientFactor;                  // Value used in calculating the gradient of the group header.  Is used to increase or decrease the color as the backcolor of the header is filled in.
  49. CXTPPaintManagerColor clrHeadTextNormal;     // Color of normal text in the group header
  50. CXTPPaintManagerColor clrHeadTextHot;        // Color of "hot" text in the group header, this is the color of text on mouse over
  51. CXTPPaintManagerColor clrClientText;         // Color of text within the client or "body" of the group.  This is the area under the group header.
  52. CXTPPaintManagerColor clrClientLink;         // Color of links within the client or "body" of the group.  This is the area under the group header.
  53. CXTPPaintManagerColor clrClientLinkHot;      // Color of "hot" links within the client or "body" of the group.  This is the color of link text on mouse over.
  54. CXTPPaintManagerColor clrClientLinkSelected; // Color of links within the client or "body" of the group.  This is the area under the group header.
  55. };
  56. //-----------------------------------------------------------------------
  57. // Summary:
  58. //     Enumeration used to indicate which type of gripper is drawn
  59. //     on task panel group headers.  This can be used when creating custom
  60. //     themes or you can override the predefined themes to change there
  61. //     grippers if drawn in the group headers.
  62. // Remarks:
  63. //     Depending on the theme and XTPTaskPanelGripper selection, the gripper
  64. //     can appear "hot" on mouse over, and display a different gripper
  65. //     then when the group is expanded and closed.
  66. // Example:
  67. // <code>
  68. //      m_wndTaskPanel.GetPaintManager()->m_eGripper = xtpTaskPanelGripperTriangle;
  69. // </code>
  70. // See Also:
  71. //     CXTPTaskPanelPaintManager::m_eGripper
  72. //
  73. // <KEYWORDS xtpTaskPanelGripperNone, xtpTaskPanelGripperBitmap, xtpTaskPanelGripperPlain, xtpTaskPanelGripperTriangle>
  74. //-----------------------------------------------------------------------
  75. enum XTPTaskPanelGripper
  76. {
  77. xtpTaskPanelGripperNone,            // Do not draw a gripper in task panel group headers.
  78. xtpTaskPanelGripperBitmap,          // Display a bitmap in task panel group header, I.e. Arrows in WinXP theme.
  79. xtpTaskPanelGripperPlain,           // Display the default "classic" gripper in task panel group headers.
  80. xtpTaskPanelGripperTriangle         // Display a triangle gripper in task panel group headers.
  81. };
  82. //===========================================================================
  83. // Summary:
  84. //     Standalone class used by CXTPTaskPanel as paint manager.
  85. //===========================================================================
  86. class _XTP_EXT_CLASS CXTPTaskPanelPaintManager
  87. {
  88. public:
  89. static const CRect rectDefault; // System selected default margins.  All parameters
  90.                                 // of this CRETC are set to CW_USEDEFAULT, which tells
  91.                                 // the system to select the default position for the object
  92.                                 // upper-left corner and ignores the y parameter.  This CRECT
  93.                                 // is used when calculating the margins of the task panel,
  94.                                 // group items margin, group outer margin, and group inner
  95.                                 // margin.  If the margins have not been modified, then this
  96.                                 // CRECT is used to set the margins.
  97. public:
  98. //-----------------------------------------------------------------------
  99. //Summary:
  100. //     Constructs a CXTPTaskPanelPaintManager object
  101. //-----------------------------------------------------------------------
  102. CXTPTaskPanelPaintManager();
  103. //-----------------------------------------------------------------------
  104. // Summary:
  105. //     Destroys a CXTPTaskPanelPaintManager object, handles cleanup and deallocation
  106. //-----------------------------------------------------------------------
  107. virtual ~CXTPTaskPanelPaintManager();
  108. //-----------------------------------------------------------------------
  109. // Summary:
  110. //     This method is called to fill background of task panel control.
  111. // Parameters:
  112. //     pDC - Pointer to a valid device context
  113. //     pTaskPanel - Points to a CXTPTaskPanel object
  114. //-----------------------------------------------------------------------
  115. virtual void FillTaskPanel(CDC* pDC, CXTPTaskPanel* pTaskPanel);
  116. //-----------------------------------------------------------------------
  117. // Summary:
  118. //     This method is called to draw a single group of the control.
  119. // Parameters:
  120. //     pDC - Pointer to a valid device context
  121. //     pGroup - Points to a CXTPTaskPanelGroup object
  122. //-----------------------------------------------------------------------
  123. virtual void DrawGroupClient(CDC* pDC, CXTPTaskPanelGroup* pGroup);
  124. //-----------------------------------------------------------------------
  125. // Summary:
  126. //     This method is called to draw the caption of the group.
  127. // Parameters:
  128. //     pDC - Pointer to a valid device context
  129. //     pGroup - Points to a CXTPTaskPanelGroup object
  130. //     bDraw - TRUE to draw; FALSE to retrieve height of caption.
  131. // Returns:
  132. //     Height of the caption.
  133. //-----------------------------------------------------------------------
  134. virtual int DrawGroupCaption(CDC* pDC, CXTPTaskPanelGroup* pGroup, BOOL bDraw);
  135. //-----------------------------------------------------------------------
  136. // Summary:
  137. //     This method is called to draw single item of control.
  138. // Parameters:
  139. //     pDC - Pointer to a valid device context.
  140. //     pItem - Points to a CXTPTaskPanelGroupItem object.
  141. //     rc - Rectangle of item to draw.
  142. //     bDraw - TRUE to draw; FALSE to retrieve height of item
  143. // Returns:
  144. //     Height of item.
  145. //-----------------------------------------------------------------------
  146. virtual CRect DrawGroupItem(CDC* pDC, CXTPTaskPanelGroupItem* pItem, CRect rc, BOOL bDraw);
  147. //-----------------------------------------------------------------------
  148. // Summary:
  149. //     This method is called to refresh the visual metrics of manager.
  150. //-----------------------------------------------------------------------
  151. virtual void RefreshMetrics();
  152. //-----------------------------------------------------------------------
  153. // Summary:
  154. //     Retrieves group colors.
  155. // Parameters:
  156. //     bSpecial - TRUE if the special group color set should be returned,
  157. //                FASLE if the normal group color set should be returned.
  158. //     pGroup - Pointer to a group to retrieve colors.
  159. // Remarks:
  160. //     If a group is special, it will appear in a different color than
  161. //     the other groups.  Groups marked as special will be displayed
  162. //     differently than normal groups drawing the users attention to
  163. //     that particular group.  This is an excellent way to show the
  164. //     user the "default" or important items.
  165. // Returns:
  166. //     The color set stored in m_groupSpecial if bSpecial is TRUE else
  167. //     the m_groupNormal color set is returned.
  168. // See Also:
  169. //     CXTPTaskPanelGroup::IsSpecialGroup, CXTPTaskPanelGroup::SetSpecialGroup
  170. //-----------------------------------------------------------------------
  171. XTP_TASKPANEL_GROUPCOLORS* GetGroupColors(BOOL bSpecial);
  172. virtual XTP_TASKPANEL_GROUPCOLORS* GetGroupColors(CXTPTaskPanelGroup* pGroup); // <combine CXTPTaskPanelPaintManager::GetGroupColors@BOOL>
  173. //-----------------------------------------------------------------------
  174. // Summary:
  175. //     This member draws a rectangle around a group item when selected,
  176. //     pressed or highlighted.
  177. // Parameters:
  178. //     pDC - Pointer to a valid device context
  179. //     pItem - Points to a CXTPTaskPanelGroupItem object.
  180. //     rc    - Bounding rectangle group to draw.
  181. //-----------------------------------------------------------------------
  182. virtual void DrawGroupItemFrame(CDC* pDC, CXTPTaskPanelGroupItem* pItem, CRect rc);
  183. //-----------------------------------------------------------------------
  184. // Summary:
  185. //     Call this member to retrieve the outer margins of a group item.
  186. // Parameters:
  187. //     pItem - Points to a CXTPTaskPanelGroupItem object.
  188. // Returns:
  189. //     Outer margins of the specified group item.
  190. // See Also:
  191. //     GetItemInnerMargins, GetGroupOuterMargins, GetGroupInnerMargins,
  192. //     GetControlMargins
  193. //-----------------------------------------------------------------------
  194. virtual CRect GetItemOuterMargins(const CXTPTaskPanelGroupItem* pItem);
  195. //-----------------------------------------------------------------------
  196. // Summary:
  197. //     Call this member to retrieve the inner margins of a group item.
  198. // Parameters:
  199. //     pItem - Points to a CXTPTaskPanelGroupItem object.
  200. // Returns:
  201. //     Inner margins of the specified group item.
  202. // See Also:
  203. //     GetItemOuterMargins, GetGroupOuterMargins, GetGroupInnerMargins,
  204. //     GetControlMargins
  205. //-----------------------------------------------------------------------
  206. virtual CRect GetItemInnerMargins(const CXTPTaskPanelGroupItem* pItem);
  207. //-----------------------------------------------------------------------
  208. // Summary:
  209. //     Call this member to retrieve the outer margins of a group.
  210. // Parameters:
  211. //     pGroup - Points to a CXTPTaskPanelGroup object.
  212. // Returns:
  213. //     Outer margins of the specified group.
  214. // See Also:
  215. //     GetItemOuterMargins, GetItemInnerMargins, GetGroupInnerMargins,
  216. //     GetControlMargins
  217. //-----------------------------------------------------------------------
  218. virtual CRect GetGroupOuterMargins(const CXTPTaskPanelGroup* pGroup);
  219. //-----------------------------------------------------------------------
  220. // Summary:
  221. //     Call this member to retrieve the padding around the image.
  222. // Parameters:
  223. //     pItem - Points to a CXTPTaskPanelItem object.
  224. // Returns:
  225. //     padding around the image of the specified group.
  226. // See Also:
  227. //     GetItemOuterMargins, GetItemInnerMargins, GetGroupInnerMargins,
  228. //     GetControlMargins
  229. //-----------------------------------------------------------------------
  230. virtual CRect GetItemIconPadding(const CXTPTaskPanelItem* pItem);
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //     Call this member to retrieve the inner margins of a group.
  234. // Parameters:
  235. //     pGroup - Points to a CXTPTaskPanelGroup object.
  236. // Returns:
  237. //     Inner margins of the specified group.
  238. // See Also:
  239. //     GetItemOuterMargins, GetItemInnerMargins, GetGroupOuterMargins,
  240. //     GetControlMargins
  241. //-----------------------------------------------------------------------
  242. virtual CRect GetGroupInnerMargins(const CXTPTaskPanelGroup* pGroup);
  243. //-----------------------------------------------------------------------
  244. // Summary:
  245. //     Call this member to retrieve the default margins used for all groups.
  246. // Parameters:
  247. //     pPanel - Pointer to a CXTPTaskPanel control
  248. // Returns:
  249. //     Default margins for all groups.
  250. // See Also:
  251. //     GetItemOuterMargins, GetItemInnerMargins, GetGroupOuterMargins,
  252. //     GetGroupInnerMargins
  253. //-----------------------------------------------------------------------
  254. virtual CRect GetControlMargins(const CXTPTaskPanel* pPanel);
  255. //-----------------------------------------------------------------------
  256. // Summary:
  257. //     Call this member to return the spacing used between groups.
  258. // Parameters:
  259. //     pPanel - Pointer to a task panel control.
  260. // Returns:
  261. //     The amount of spacing placed between task panel groups.
  262. //-----------------------------------------------------------------------
  263. virtual int GetGroupSpacing(const CXTPTaskPanel* pPanel);
  264. //-----------------------------------------------------------------------
  265. // Summary:
  266. //     The member is called to draw a group scroll button.
  267. // Parameters:
  268. //     pDC           - Pointer to a valid device context
  269. //     pScrollButton - Pointer to the scroll button to draw.
  270. // Remarks:
  271. //     DrawScrollButton only draws group scroll buttons, it does not draw
  272. //     group caption scroll buttons.  DrawCaptionGripper draws the scroll
  273. //     button for the group caption.
  274. // See Also:
  275. //     DrawCaptionGripper
  276. //-----------------------------------------------------------------------
  277. virtual void DrawScrollButton(CDC* pDC, CXTPTaskPanelScrollButton* pScrollButton);
  278. //-----------------------------------------------------------------------
  279. // Summary:
  280. //     Call this method to set format of drawn text for items and caption.
  281. // Parameters:
  282. //     nTextFormat - New format that will be used for CDC::DrawText calls
  283. //     bCaption - TRUE to apply it for caption; FALSE for items.
  284. // Example:
  285. //     <code>m_wndTaskPanel.GetPaintManager()->SetTextFormat(DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER | DT_NOPREFIX);</code>
  286. //-----------------------------------------------------------------------
  287. void SetTextFormat(int nTextFormat, BOOL bCaption = FALSE);
  288. public:
  289. //-----------------------------------------------------------------------
  290. // Summary:
  291. //     Call this member to set the font used to display task panel
  292. //     item text.  Can use custom font or the standard item font.
  293. // Parameters:
  294. //     pLogFont              - Font used to display task panel item text.
  295. //     bUseStandardItemsFont - TRUE to use standard item font, FALSE to
  296. //                             use font specified in pLogFont.
  297. //-----------------------------------------------------------------------
  298. void SetItemsFontIndirect(LOGFONT* pLogFont, BOOL bUseStandardItemsFont = FALSE);
  299. //-----------------------------------------------------------------------
  300. // Summary:
  301. //     Call this member to set the font used to display text in task panel
  302. //     group caption.  Can use custom font or the standard caption font.
  303. // Parameters:
  304. //     pLogFont                - Font to use for task panel group caption text.
  305. //     bUseStandardCaptionFont - TRUE to use standard caption font.  FALSE to
  306. //                               use font specified in pLogFont.
  307. //-----------------------------------------------------------------------
  308. void SetCaptionFontIndirect(LOGFONT* pLogFont, BOOL bUseStandardCaptionFont = FALSE);
  309. //-----------------------------------------------------------------------
  310. // Summary:
  311. //     Call this member to retrieve the font used to display task panel item text.
  312. // Parameters:
  313. //     pItem - Pointer to a valid task panel item.
  314. // Returns:
  315. //     Font used to display task panel item text.
  316. //-----------------------------------------------------------------------
  317. virtual CFont* GetItemFont(CXTPTaskPanelItem* pItem);
  318. //-----------------------------------------------------------------------
  319. // Summary:
  320. //     Fills group rectangle
  321. // Parameters:
  322. //     pDC - Pointer to a valid device context
  323. //     pGroup - Points to a CXTPTaskPanelGroup object
  324. //     rc - Rectangle of group to be draw.
  325. // See Also: DrawGroupClientFace
  326. //-----------------------------------------------------------------------
  327. virtual void FillGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  328. protected:
  329. //-----------------------------------------------------------------------
  330. // Summary:
  331. //     This member is called to a group item when the layout is xtpTaskItemLayoutImagesWithText.
  332. // Parameters:
  333. //     pDC   - Pointer to a valid device context.
  334. //     pItem - Points to a CXTPTaskPanelGroupItem object.
  335. //     rc    - Rectangle of group item to draw.
  336. //     bDraw - TRUE to draw the item, FALSE to retrieve
  337. //             the item's bounding rectangle (only the text is drawn).
  338. // Returns:
  339. //     Returns 0 if bDraw is TRUE and drawing is successful.
  340. //
  341. //     Returns the item's rectangle including the inner margins of the item.
  342. //     So the left and right margins of the item will be the left and right
  343. //     margins of the item + the left and right inner margins of the item.
  344. //
  345. //     DrawGroupItem calls this method to draw items with a layout if type
  346. //     xtpTaskItemLayoutImagesWithText.
  347. // See Also:
  348. //     DrawGroupItem, DrawGroupItemImageWithTextBelow, DrawGroupItemImage, GetItemInnerMargins
  349. //-----------------------------------------------------------------------
  350. CRect DrawGroupItemImageWithText(CDC* pDC, CXTPTaskPanelGroupItem* pItem, CRect rc, BOOL bDraw);
  351. //-----------------------------------------------------------------------
  352. // Summary:
  353. //     This member is called to a group item when the layout is xtpTaskItemLayoutImagesWithTextBelow.
  354. // Parameters:
  355. //     pDC   - Pointer to a valid device context.
  356. //     pItem - Points to a CXTPTaskPanelGroupItem object.
  357. //     rc    - Rectangle of group item to draw.
  358. //     bDraw - TRUE to draw the item, FALSE to retrieve
  359. //             the item's bounding rectangle (only the text is drawn).
  360. // Returns:
  361. //     Returns 0 if bDraw is TRUE and drawing is successful.
  362. //
  363. //     Returns the item's rectangle including the inner margins of the item.
  364. //     So the left and right margins of the item will be the left and right
  365. //     margins of the item + the left and right inner margins of the item.
  366. //
  367. //     DrawGroupItem calls this method to draw items with a layout if type
  368. //     xtpTaskItemLayoutImagesWithTextBelow.
  369. // See Also:
  370. //     DrawGroupItem, DrawGroupItemImageWithText, DrawGroupItemImage, GetItemInnerMargins
  371. //-----------------------------------------------------------------------
  372. CRect DrawGroupItemImageWithTextBelow(CDC* pDC, CXTPTaskPanelGroupItem* pItem, CRect rc, BOOL bDraw);
  373. //-----------------------------------------------------------------------
  374. // Summary:
  375. //     This member is called to a group item when the layout is xtpTaskItemLayoutImages.
  376. // Parameters:
  377. //     pDC   - Pointer to a valid device context.
  378. //     pItem - Points to a CXTPTaskPanelGroupItem object.
  379. //     rc    - Rectangle of group item to draw.
  380. //     bDraw - TRUE to draw the item, FALSE to retrieve
  381. //             the item's bounding rectangle (no drawing is done).
  382. // Returns:
  383. //     Returns 0 if bDraw is TRUE and drawing is successful.
  384. //
  385. //     Returns the item's rectangle including the inner margins of the item.
  386. //     So the left and right margins of the item will be the left and right
  387. //     margins of the item + the left and right inner margins of the item.
  388. //
  389. //     DrawGroupItem calls this method to draw items with a layout if type
  390. //     xtpTaskItemLayoutImages.
  391. // See Also:
  392. //     DrawGroupItem, DrawGroupItemImageWithText, DrawGroupItemImageWithTextBelow, GetItemInnerMargins
  393. //-----------------------------------------------------------------------
  394. CRect DrawGroupItemImage(CDC* pDC, CXTPTaskPanelGroupItem* pItem, CRect rc, BOOL bDraw);
  395. protected:
  396. //-----------------------------------------------------------------------
  397. // Summary:
  398. //     This method is called to draw the face of the group.
  399. // Parameters:
  400. //     pDC - Pointer to a valid device context
  401. //     pGroup - Points to a CXTPTaskPanelGroup object
  402. //     rc - Rectangle of group to be draw.
  403. //-----------------------------------------------------------------------
  404. virtual void DrawGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  405. //-----------------------------------------------------------------------
  406. // Summary:
  407. //     This method is called to draw the items of the group.
  408. // Parameters:
  409. //     pDC - Pointer to a valid device context
  410. //     pGroup - Points to a CXTPTaskPanelGroup object.
  411. //     rc - Rectangle of group to be draw.
  412. //-----------------------------------------------------------------------
  413. virtual void DrawGroupClientItems(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  414. //-----------------------------------------------------------------------
  415. // Summary:
  416. //     This method is called to draw gripper of the caption.
  417. // Parameters:
  418. //     pDC    - Pointer to a valid device context
  419. //     pGroup - Points to a CXTPTaskPanelGroup object
  420. //     rc     - Rectangle of group to be drawn.
  421. // Returns:
  422. //     Rectangle of caption after draw.
  423. // Remarks:
  424. //     The caption gripper is the button that allows the group to be
  425. //     expanded and collapsed.
  426. // See Also:
  427. //     DrawCaptionGripperBitmap, DrawCaptionGripperSigns
  428. //-----------------------------------------------------------------------
  429. virtual CRect DrawCaptionGripper(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  430. //-----------------------------------------------------------------------
  431. // Summary:
  432. //     This method is called to get width of caption's gripper.
  433. // Parameters:
  434. //     pGroup - Points to a CXTPTaskPanelGroup object
  435. //     rc - Rectangle of group to be drawn.
  436. // Returns:
  437. //     Caption's gripper width.
  438. // Remarks:
  439. //     The caption gripper is the button that allows the group to be
  440. //     expanded and collapsed.
  441. //-----------------------------------------------------------------------
  442. virtual int GetCaptionGripperWidth(CXTPTaskPanelGroup* pGroup, CRect rc);
  443. //-----------------------------------------------------------------------
  444. // Summary:
  445. //     This method is called to draw text caption of the task panel item.
  446. // Parameters:
  447. //     pDC     - Pointer to a valid device context
  448. //     pItem   - Points to a CXTPTaskPanelItem object.
  449. //     rcText  - Rectangle of item to draw.
  450. //     nFormat - [in] Specifies the method of formatting the text.
  451. // Remarks:
  452. //     The nFormat parameter can be one or more of the following values:
  453. //        * <b>DT_BOTTOM</b>          Justifies the text to the bottom of the rectangle. This value is used
  454. //                                    only with the DT_SINGLELINE value.
  455. //        * <b>DT_CALCRECT</b>        Determines the width and height of the rectangle.
  456. //        * <b>DT_CENTER</b>          Centers text horizontally in the rectangle.
  457. //        * <b>DT_EDITCONTROL</b>     Duplicates the text-displaying characteristics of a multiline edit
  458. //                                    control. Specifically, the average character width is calculated in the same manner as for an edit control, and the function does not display a partially visible last line.
  459. //        * <b>DT_END_ELLIPSIS</b>    For displayed text, if the end of a string does not fit in the rectangle, it is truncated and ellipses are added. If a word that is not at the end of the string goes beyond the limits of the rectangle, it is truncated without ellipses.
  460. //                                    The string is not modified unless the DT_MODIFYSTRING flag is specified.
  461. //        * <b>DT_EXPANDTABS</b>      Expands tab characters. The default number of characters per tab is eight. The DT_WORD_ELLIPSIS, DT_PATH_ELLIPSIS, and DT_END_ELLIPSIS values cannot be used with the DT_EXPANDTABS value.
  462. //        * <b>DT_EXTERNALLEADING</b> Includes the font external leading in line height. Normally, external leading is not included in the height of a line of text.
  463. //        * <b>DT_HIDEPREFIX</b>      Ignores the ampersand (&) prefix character in the text. The letter that follows will not be underlined, but other mnemonic-prefix characters are still processed.
  464. //        * <b>DT_INTERNAL</b>        Uses the system font to calculate text metrics.
  465. //        * <b>DT_LEFT</b>            Aligns text to the left.
  466. //        * <b>DT_MODIFYSTRING</b>    Modifies the specified string to match the displayed text. This value has no effect unless DT_END_ELLIPSIS or DT_PATH_ELLIPSIS is specified.
  467. //        * <b>DT_NOCLIP</b>          Draws without clipping.
  468. //        * <b>DT_NOFULLWIDTHCHARBREAK</b> Prevents a line break at a DBCS (double-wide character string), so that the line breaking rule is equivalent to SBCS strings. For example, this can be used in Korean windows, for more readability of icon labels. This value has no effect unless DT_WORDBREAK is specified.
  469. //        * <b>DT_NOPREFIX</b>        Turns off processing of prefix characters.
  470. //        * <b>DT_PATH_ELLIPSIS</b>   For displayed text, replaces characters in the middle of the string with ellipses so that the result fits in the specified rectangle. If the string contains backslash () characters, DT_PATH_ELLIPSIS preserves as much as possible of the text after the last backslash.
  471. //                                    The string is not modified unless the DT_MODIFYSTRING flag is specified.
  472. //        * <b>DT_PREFIXONLY</b>      Draws only an underline at the position of the character following the ampersand (&) prefix character. Does not draw any other characters in the string.
  473. //        * <b>DT_RIGHT</b>           Aligns text to the right.
  474. //        * <b>DT_RTLREADING</b>      Layout in right-to-left reading order for bi-directional text when the font selected into the hdc is a Hebrew or Arabic font. The default reading order for all text is left-to-right.
  475. //        * <b>DT_SINGLELINE</b>      Displays text on a single line only. Carriage returns and line feeds do not break the line.
  476. //        * <b>DT_TABSTOP</b>         Sets tab stops. Bits 158 (high-order byte of the low-order word) of the uFormat parameter specify the number of characters for each tab. The default number of characters per tab is eight. The DT_CALCRECT, DT_EXTERNALLEADING, DT_INTERNAL, DT_NOCLIP, and DT_NOPREFIX values cannot be used with the DT_TABSTOP value.
  477. //        * <b>DT_TOP</b>             Justifies the text to the top of the rectangle.
  478. //        * <b>DT_VCENTER</b>         Centers text vertically. This value is used only with the DT_SINGLELINE value.
  479. //        * <b>DT_WORDBREAK</b>       Breaks words. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by the lpRect parameter. A carriage return-line feed sequence also breaks the line.
  480. //                                    If this is not specified, output is on one line.
  481. //        * <b>DT_WORD_ELLIPSIS</b>   Truncates any word that does not fit in the rectangle and adds ellipses.
  482. //     <p/>
  483. //     DrawGroupCaption uses this method to draw the group caption with
  484. //     nFormat = DT_SINGLELINE | DT_LEFT | DT_END_ELLIPSIS | DT_VCENTER | DT_NOPREFIX
  485. //
  486. //     DrawGroupItemImageWithText and DrawGroupItemImageWithTextBelow use
  487. //     DrawItemCaption to draw the group item caption.
  488. //-----------------------------------------------------------------------
  489. virtual void DrawItemCaption(CDC* pDC, CXTPTaskPanelItem* pItem, CRect rcText, UINT nFormat);
  490. //-----------------------------------------------------------------------
  491. // Summary:
  492. //     This method is called to draw the icon of the task panel item.
  493. // Parameters:
  494. //     pDC    - Pointer to a valid device context
  495. //     pItem  - Points to the item to draw the image on.
  496. //     ptIcon - Top left corner to start drawing icon.
  497. //     pImage - Pointer to the image to draw.
  498. //     szIcon - Size of the image to draw.
  499. // Remarks:
  500. //     DrawItemImage is called by DrawGroupItemImageWithText,
  501. //     DrawGroupItemImageWithTextBelow, and DrawGroupCaption to draw the
  502. //     image for the item.
  503. //-----------------------------------------------------------------------
  504. virtual void DrawItemImage(CDC* pDC, CXTPTaskPanelItem* pItem, CPoint ptIcon, CXTPImageManagerIcon* pImage, CSize szIcon);
  505. // Helper functions
  506. protected:
  507. //-----------------------------------------------------------------------
  508. // Summary:
  509. //     Call this member function to blend from one color to another color
  510. //     by the amount specified in nAlpha.
  511. // Parameters:
  512. //     clrFrom - RGB Start color
  513. //     clrTo   - Blend to this RGB color.
  514. //     nAlpha  - The amount of transparency.
  515. // Returns:
  516. //     COLORREF containing blended color.
  517. // Remarks:
  518. //     This function takes a blended color intensity which is
  519. //     (clrFrom * nAlpha + clrTo * (255 - nAlpha)) / 255
  520. //-----------------------------------------------------------------------
  521. COLORREF BlendColor(COLORREF clrFrom, COLORREF clrTo, int nAlpha);
  522. //-----------------------------------------------------------------------
  523. // Summary:
  524. //     This method is called to draw the group caption expand button bitmap.
  525. // Parameters:
  526. //     pDC       - Pointer to a valid device context
  527. //     pGroup    - Pointer to group.
  528. //     bExpanded - TRUE to draw the bitmap when group is expanded.
  529. //     bHot      - TRUE to draw the bitmap when the group id "hot".
  530. //                 This is when the mouse pointer is positioned over the gripper.
  531. //     rc - CRect object specifying size of area.
  532. // Returns:
  533. //     Bounding rectangle of group caption - gripper bitmap width.
  534. // See Also:
  535. //     CXTPTaskPanelGroup::SetSpecialGroup, CXTPTaskPanelGroup::IsSpecialGroup
  536. //-----------------------------------------------------------------------
  537. CRect DrawCaptionGripperBitmap(CDC* pDC, CXTPTaskPanelGroup* pGroup, BOOL bExpanded, BOOL bHot, CRect rc);
  538. //-----------------------------------------------------------------------
  539. // Summary:
  540. //     This method is used to draw the ">>" and "<<" of the group caption
  541. //     expand button for the xtpTaskPanelThemeOffice2000 theme.
  542. // Parameters:
  543. //     pDC       - Pointer to a valid device context
  544. //     pt - CPoint object specifies x y coordinates.
  545. //     clr - COLORREF specifies RGB color value.
  546. //     bExpanded - TRUE to draw the expanded gripper ">>", FLASE to draw the
  547. //                 retracted gripper "<<".
  548. //-----------------------------------------------------------------------
  549. void DrawCaptionGripperSigns(CDC* pDC, CPoint pt, COLORREF clr, BOOL bExpanded);
  550. //-------------------------------------------------------------------------
  551. // Summary:
  552. //     This method loads the group caption expand button bitmaps for the
  553. //     xtpTaskPanelThemeNativeWinXPPlain and xtpTaskPanelThemeNativeWinXP
  554. //     themes.
  555. // Remarks:
  556. //     If the current operating system is Windows Xp and the current theme
  557. //     is xtpSystemThemeBlue, xtpSystemThemeOlive, or xtpSystemThemeSilver
  558. //     then the gripper bitmap is loaded from the operating system.  For
  559. //     all other OS and themes, CreateGripperIcon is used to create an
  560. //     emulated version of the Windows Xp gripper.
  561. // See Also:
  562. //     CreateGripperIcon
  563. //-------------------------------------------------------------------------
  564. void CreateGripperBitmaps();
  565. //-----------------------------------------------------------------------
  566. // Summary:
  567. //     This method creates expand button icons for the xtpTaskPanelThemeNativeWinXPPlain
  568. //     and xtpTaskPanelThemeNativeWinXP themes when the current operation system used
  569. //     is not Windows Xp or if the OS is WinXP and Classic themes are used.
  570. // Parameters:
  571. //     hIcon          - Specifies icon handle.
  572. //     nIDResource    - Specifies icon resource ID.
  573. //     clrGripperBack - Background color of the expand button.
  574. // See Also:
  575. //     CreateGripperBitmaps
  576. //-----------------------------------------------------------------------
  577. void CreateGripperIcon(HICON& hIcon, UINT nIDResource, COLORREF clrGripperBack);
  578. //-------------------------------------------------------------------------
  579. // Summary:
  580. //     This method is called to free the memory used by the group caption bitmaps.
  581. //-------------------------------------------------------------------------
  582. void FreeBitmaps();
  583. //-----------------------------------------------------------------------
  584. // Summary:
  585. //     This method is only used when drawing hot, pressed and selected group
  586. //     items and scroll buttons when m_bOfficeHighlight is TRUE.
  587. // Parameters:
  588. //     pDC      - Pointer to a valid device context
  589. //     rc       - CRect object specifying size of area.
  590. //     clrPen   - COLORREF specifying pen RGB color value.
  591. //     clrBrush - COLORREF specifying brush RGB color value.
  592. //-----------------------------------------------------------------------
  593. void Rectangle(CDC* pDC, CRect rc, COLORREF clrPen, COLORREF clrBrush);
  594. //-----------------------------------------------------------------------
  595. // Summary:
  596. //     This method is called to retrieve the highlight offset of
  597. //     the text of an item.
  598. // Parameters:
  599. //     pItem - Points to a CXTPTaskPanelGroupItem object.
  600. // Returns:
  601. //     If the item is selected, offset is (1, 1), else offset is (0, 0).
  602. //-----------------------------------------------------------------------
  603. virtual CPoint GetHighlightOffset(CXTPTaskPanelGroupItem* pItem);
  604. //-----------------------------------------------------------------------
  605. // Summary:
  606. //     This method is called to draw the "drag arrow" while dragging an
  607. //     item.
  608. // Parameters:
  609. //     pDC    - Pointer to a valid device context.
  610. //     pItem  - Pointer to the group item that the drag arrow (line) is
  611. //              drawn above if dragging up, and the group item that the
  612. //              drag arrow (line) is drawn below is dragging down.
  613. //     rc     - CRect object specifying size of area.
  614. //     bAfter - TRUE to draw the drag arrow at the bottom of pItem, this
  615. //              is done when dragging in the down direction.  FALSE to
  616. //              draw the drag arrow before pItem.
  617. // Remarks:
  618. //     The "drag arrow" is the line that is placed above or below a group
  619. //     item when dragging an item.  The drag arrow is draw for all themes
  620. //     except xtpTaskPanelThemeToolbox.
  621. // See Also:
  622. //     CXTPTaskPanelToolboxTheme::DrawGroupCaption
  623. //-----------------------------------------------------------------------
  624. virtual void DrawDragArrow(CDC* pDC, CXTPTaskPanelItem* pItem, CRect rc, BOOL bAfter = FALSE);
  625. //-----------------------------------------------------------------------
  626. // Summary:
  627. //     This method is called to draw rectangle around focused item.
  628. // Parameters:
  629. //     pDC - Pointer to a valid device context.
  630. //     rc  - Bounding rectangle.
  631. //-----------------------------------------------------------------------
  632. virtual void DrawFocusRect(CDC* pDC, CRect rc);
  633. private:
  634. void PremultplyAlpha(HBITMAP& bmp);
  635. void ConvertToHSL(COLORREF clr, double& h, double& s, double& l);
  636. double ConvertHueToRGB(double temp1, double temp2, double temp3);
  637. COLORREF ConvertFromHSL(double h, double s, double l);
  638. void Triangle(CDC* pDC, CPoint pt0, CPoint pt1, CPoint pt2, COLORREF clr);
  639. void DrawScrollArrow(CDC* pDC, CPoint pt0, CPoint pt1, CPoint pt2, BOOL bEnabled);
  640. CRect MergeRect(CRect rcSpecified, CRect rcDefault);
  641. public:
  642. BOOL m_bEmulateEplorerTheme;        // TRUE to use Explorer theme under WinXP and Office 2000 under older OS.
  643. XTPTaskPanelGripper m_eGripper;     // Gripper of the manager.
  644. BOOL m_bBoldCaption;                // TRUE to display caption text in bold font, FALSE to display caption text in normal type.
  645. CRect m_rcGroupOuterMargins;        // Outer margins of the group.
  646. CRect m_rcGroupInnerMargins;        // Inner margins of the group.
  647. CRect m_rcItemOuterMargins;         // Outer margins of the group items.
  648. CRect m_rcItemInnerMargins;         // Inner margins of the group items.
  649. CRect m_rcControlMargins;           // Default margins for all groups.
  650. int   m_nGroupSpacing;              // Amount of space placed between groups in the task panel.
  651. CRect m_rcImageLayoutIconPadding;   // Padding around images for xtpTaskItemLayoutImages layout.
  652. CRect m_rcItemIconPadding;          // Padding around images for items.
  653. CRect m_rcGroupIconPadding;         // Padding around images for groups.
  654. BOOL m_bOfficeHighlight;            // TRUE to highlight group items and scroll buttons using the Office XP style (XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_HIGHLIGHT_PUSHED)
  655. BOOL m_bInvertDragRect;             // Only used when theme is set to xtpTaskPanelThemeToolbox.
  656. BOOL m_bCaptionScrollButton;        // TRUE if group caption scroll button is visible, FALSE if it is hidden.
  657. BOOL m_bEmbossedDisabledText;       // TRUE to draw disabled text embossed.
  658. protected:
  659. BOOL m_bUseBitmapGrippers;          // TRUE to use alpha grippers.
  660. HICON m_hGripperNormal;             // Icon of normal group header gripper
  661. HICON m_hGripperSpecial;            // Icon of special group header gripper.
  662. HBITMAP m_bmpGrippers[8];           // Bitmaps of alpha grippers.
  663. CFont m_fntCaption;                 // Caption font.
  664. CFont m_fntIcon;                    // Normal Items font.
  665. CFont m_fntIconBold;                // Bold items font.
  666. CFont m_fntIconHot;                 // Hot items font.
  667. CFont m_fntIconHotBold;             // Bold items font.
  668. CXTPPaintManagerColorGradient m_clrBackground;      // Background color of Task Panel.
  669. XTP_TASKPANEL_GROUPCOLORS m_groupNormal;            // Normal colors set.
  670. XTP_TASKPANEL_GROUPCOLORS m_groupSpecial;           // Special colors set.
  671. CXTPPaintManagerColor m_clrHighlightHot;            // Color of items when they are "hot." This the color of the item on mouseover if hot tracking is enabled.
  672. CXTPPaintManagerColor m_clrHighlightSelected;       // Color of items when they are selected. This is when the item has focus or is clicked on.
  673. CXTPPaintManagerColor m_clrHighlightPressed;        // Color of items when they are pressed.  This is when the item is clicked on.
  674. CXTPPaintManagerColorGradient m_clrHighlightBorder; // Border color of items when they are "hot."  This the border color of the item on mouseover if hot tracking is enabled.
  675. BOOL m_bOfficeBorder;               // TRUE to use office borders.
  676. BOOL m_bLeftRoundedCorner;          // TRUE to round left corner of the group caption.
  677. BOOL m_bRightRoundedCorner;         // TRUE to round right corner of the group caption.
  678. int m_nCaptionHeight;               // Caption height in pixels.
  679. BOOL m_bUseStandardCaptionFont;     // TRUE to use system font for group caption text.
  680. BOOL m_bUseStandardItemsFont;       // TRUE to use system font for item caption text.
  681. int m_nItemTextFormat;              // Format flags of item text.  See CXTPTaskPanelPaintManager::DrawItemCaption for a list of format flags.
  682. int m_nCaptionTextFormat;           // Format flags of caption text.  See CXTPTaskPanelPaintManager::DrawItemCaption for a list of format flags.
  683. friend class CXTPTaskPanelColorSet;
  684. };
  685. namespace XTPTaskPanelPaintThemes
  686. {
  687. //===========================================================================
  688. // Summary:
  689. //     Class that represents an Office 2003 style theme.
  690. // See Also:
  691. //     CXTPTaskPanel::SetTheme
  692. //===========================================================================
  693. class _XTP_EXT_CLASS CXTPTaskPanelOffice2003Theme : public CXTPTaskPanelPaintManager
  694. {
  695. public:
  696. //-------------------------------------------------------------------------
  697. // Summary:
  698. //     Constructs a CXTPTaskPanelOffice2003Theme object.
  699. //-------------------------------------------------------------------------
  700. CXTPTaskPanelOffice2003Theme();
  701. //-------------------------------------------------------------------------
  702. // Summary:
  703. //     This method is called to refresh the visual metrics of task panel.
  704. //-------------------------------------------------------------------------
  705. void RefreshMetrics();
  706. };
  707. //===========================================================================
  708. // Summary:
  709. //     Class that represents an Explorer style theme.
  710. // See Also:
  711. //     CXTPTaskPanel::SetTheme
  712. //===========================================================================
  713. class _XTP_EXT_CLASS CXTPTaskPanelExplorerTheme : public CXTPTaskPanelPaintManager
  714. {
  715. public:
  716. //-------------------------------------------------------------------------
  717. // Summary:
  718. //     Constructs a CXTPTaskPanelExplorerTheme object.
  719. //-------------------------------------------------------------------------
  720. CXTPTaskPanelExplorerTheme();
  721. //-------------------------------------------------------------------------
  722. // Summary:
  723. //     This method is called to refresh the visual metrics of task panel.
  724. //-------------------------------------------------------------------------
  725. void RefreshMetrics();
  726. BOOL m_bExplorerTheme;  // TRUE to use Explorer theme under WinXP and to use office 2000 under older OSes.
  727. };
  728. //===========================================================================
  729. // Summary:
  730. //     Base class theme that all other themes are derived from.  Use this
  731. //     class when creating a custom theme.
  732. // See Also:
  733. //     CXTPTaskPanel::SetTheme, CXTPTaskPanel::SetCustomTheme
  734. //===========================================================================
  735. class _XTP_EXT_CLASS CXTPTaskPanelPaintManagerPlain : public CXTPTaskPanelPaintManager
  736. {
  737. public:
  738. //-------------------------------------------------------------------------
  739. // Summary:
  740. //     Constructs a CXTPTaskPanelPaintManagerPlain object.
  741. //-------------------------------------------------------------------------
  742. CXTPTaskPanelPaintManagerPlain();
  743. //-------------------------------------------------------------------------
  744. // Summary:
  745. //     This method is called to refresh the visual metrics of task panel.
  746. //-------------------------------------------------------------------------
  747. void RefreshMetrics();
  748. //-----------------------------------------------------------------------
  749. // Summary:
  750. //     This method is called to draw the face of the group.
  751. // Parameters:
  752. //     pDC    - Pointer to a valid device context
  753. //     pGroup - Points to a CXTPTaskPanelGroup object
  754. //     rc     - Rectangle of group to be draw.
  755. //-----------------------------------------------------------------------
  756. void DrawGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  757. //-----------------------------------------------------------------------
  758. // Summary:
  759. //     Fills group rectangle
  760. // Parameters:
  761. //     pDC - Pointer to a valid device context
  762. //     pGroup - Points to a CXTPTaskPanelGroup object
  763. //     rc - Rectangle of group to be draw.
  764. // See Also: DrawGroupClientFace
  765. //-----------------------------------------------------------------------
  766. void FillGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  767. //-----------------------------------------------------------------------
  768. // Summary:
  769. //     This method is called to fill background of task panel control.
  770. // Parameters:
  771. //     pDC - Pointer to a valid device context
  772. //     pTaskPanel - Points to a CXTPTaskPanel object
  773. //-----------------------------------------------------------------------
  774. void FillTaskPanel(CDC* pDC, CXTPTaskPanel* pTaskPanel);
  775. //-----------------------------------------------------------------------
  776. // Summary:
  777. //     This method is called to draw the caption of the group.
  778. // Parameters:
  779. //     pDC - Pointer to a valid device context
  780. //     pGroup - Points to a CXTPTaskPanelGroup object
  781. //     bDraw - TRUE to draw; FALSE to retrieve height of caption.
  782. // Returns:
  783. //     Height of the caption.
  784. //-----------------------------------------------------------------------
  785. int DrawGroupCaption(CDC* pDC, CXTPTaskPanelGroup* pGroup, BOOL bDraw);
  786. protected:
  787. BOOL m_bRoundedFrame;           // TRUE to draw a rounded frame around all of the groups in the task panel.  Can bee seen in the Native WinXP theme.  Default is TRUE.
  788. BOOL m_bOfficeCaption;          // FALSE to draw a rounded rectangle around caption.  TRUE to not draw a rectangle around caption, caption will not appear in a rectrangle. Default is FALSE.
  789. };
  790. //===========================================================================
  791. // Summary:
  792. //     The CXTPTaskPanelExplorerThemePlain class is used to enable a classic Explorer style theme.
  793. // See Also:
  794. //     CXTPTaskPanel::SetTheme
  795. //===========================================================================
  796. class _XTP_EXT_CLASS CXTPTaskPanelExplorerThemePlain : public CXTPTaskPanelPaintManagerPlain
  797. {
  798. public:
  799. //-------------------------------------------------------------------------
  800. // Summary:
  801. //     Constructs a CXTPTaskPanelExplorerThemePlain object.
  802. //-------------------------------------------------------------------------
  803. CXTPTaskPanelExplorerThemePlain();
  804. //-------------------------------------------------------------------------
  805. // Summary:
  806. //     This method is called to refresh the visual metrics of task panel.
  807. //-------------------------------------------------------------------------
  808. void RefreshMetrics();
  809. BOOL m_bExplorerTheme;  // TRUE to use Explorer theme under WinXP and to use Office 2000 under older OSes.
  810. //-----------------------------------------------------------------------
  811. // Summary:
  812. //     This method is called to draw gripper of the caption.
  813. // Parameters:
  814. //     pDC    - Pointer to a valid device context
  815. //     pGroup - Points to a CXTPTaskPanelGroup object
  816. //     rc     - Rectangle of group to be drawn.
  817. // Returns:
  818. //     Rectangle of caption after draw.
  819. // Remarks:
  820. //     The caption gripper is the button that allows the group to be
  821. //     expanded and collapsed.
  822. //
  823. //     If the current operating system is Windows Xp and the current theme
  824. //     is xtpSystemThemeBlue, xtpSystemThemeOlive, or xtpSystemThemeSilver
  825. //     then the gripper bitmap is loaded from the operating system.  The WinXp
  826. //     gripper is created with CXTPTaskPanelPaintManager::CreateGripperBitmaps. For
  827. //     all other OS and themes, CXTPTaskPanelPaintManager::CreateGripperIcon
  828. //     is used to create an emulated version of the Windows Xp gripper.
  829. //
  830. //     If m_bExplorerTheme is FALSE, then CXTPTaskPanelPaintManager::DrawCaptionGripper
  831. //     is used to draw the gripper, so no bitmap is used.
  832. //
  833. //     If m_bExplorerTheme is TRUE, then CXTPTaskPanelPaintManager::DrawCaptionGripperBitmap
  834. //     is used to draw the gripper, this load a bitmap as mentioned before.
  835. //
  836. // See Also:
  837. //     CXTPTaskPanelPaintManager::DrawCaptionGripperBitmap,
  838. //     CXTPTaskPanelPaintManager::DrawCaptionGripperSigns
  839. //-----------------------------------------------------------------------
  840. CRect DrawCaptionGripper(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  841. };
  842. //===========================================================================
  843. // Summary:
  844. //     The CXTPTaskPanelOfficeXPThemePlain class is used to enable a classic Office XP style theme.
  845. // See Also:
  846. //     CXTPTaskPanel::SetTheme
  847. //===========================================================================
  848. class _XTP_EXT_CLASS CXTPTaskPanelOfficeXPThemePlain : public CXTPTaskPanelPaintManagerPlain
  849. {
  850. public:
  851. //-------------------------------------------------------------------------
  852. // Summary:
  853. //     Constructs a CXTPTaskPanelOfficeXPThemePlain object.
  854. //-------------------------------------------------------------------------
  855. CXTPTaskPanelOfficeXPThemePlain();
  856. //-------------------------------------------------------------------------
  857. // Summary:
  858. //     This method is called to refresh the visual metrics of task panel.
  859. //-------------------------------------------------------------------------
  860. void RefreshMetrics();
  861. };
  862. //===========================================================================
  863. // Summary:
  864. //     The CXTPTaskPanelOffice2003ThemePlain class is used to enable a classic Office 2003 style theme.
  865. // See Also:
  866. //     CXTPTaskPanel::SetTheme
  867. //===========================================================================
  868. class _XTP_EXT_CLASS CXTPTaskPanelOffice2003ThemePlain : public CXTPTaskPanelOfficeXPThemePlain
  869. {
  870. public:
  871. //-------------------------------------------------------------------------
  872. // Summary:
  873. //     Constructs a CXTPTaskPanelOffice2003ThemePlain object.
  874. //-------------------------------------------------------------------------
  875. CXTPTaskPanelOffice2003ThemePlain();
  876. //-------------------------------------------------------------------------
  877. // Summary:
  878. //     This method is called to refresh the visual metrics of task panel.
  879. //-------------------------------------------------------------------------
  880. void RefreshMetrics();
  881. };
  882. //===========================================================================
  883. // Summary:
  884. //     The CXTPTaskPanelToolboxTheme class is used to enable a Toolbox style theme.
  885. // See Also:
  886. //     CXTPTaskPanel::SetTheme
  887. //===========================================================================
  888. class _XTP_EXT_CLASS CXTPTaskPanelToolboxTheme : public CXTPTaskPanelPaintManagerPlain
  889. {
  890. public:
  891. //-------------------------------------------------------------------------
  892. // Summary:
  893. //     Constructs a CXTPTaskPanelToolboxTheme object.
  894. //-------------------------------------------------------------------------
  895. CXTPTaskPanelToolboxTheme();
  896. //-------------------------------------------------------------------------
  897. // Summary:
  898. //     This method is called to refresh the visual metrics of task panel.
  899. //-------------------------------------------------------------------------
  900. void RefreshMetrics();
  901. //-----------------------------------------------------------------------
  902. // Summary:
  903. //     This method is called to draw the caption of the group.
  904. // Parameters:
  905. //     pDC    - Pointer to a valid device context
  906. //     pGroup - Points to a CXTPTaskPanelGroup object
  907. //     bDraw  - TRUE to draw; FALSE to retrieve height of caption.
  908. // Returns:
  909. //     Height of the caption.
  910. //-----------------------------------------------------------------------
  911. int DrawGroupCaption(CDC* pDC, CXTPTaskPanelGroup* pGroup, BOOL bDraw);
  912. protected:
  913. //-----------------------------------------------------------------------
  914. // Summary:
  915. //     This member is called to draw the background of the group caption.
  916. // Parameters:
  917. //     pDC    - Pointer to a valid device context.
  918. //     pGroup - Fill group caption of this group.
  919. //     rc     - Bounding rectangle of the group caption.
  920. // Returns:
  921. //     Bounding rectangle of text within group caption.
  922. // Remarks:
  923. //     This member will draw the normal, hot, and pressed background for
  924. //     the group caption.
  925. //-----------------------------------------------------------------------
  926. virtual CRect DrawGroupCaptionBackground(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  927. };
  928. //===========================================================================
  929. // Summary:
  930. //     The CXTPTaskPanelToolboxWhidbeyTheme class is used to enable a VS.NET Whidbey style theme.
  931. // See Also:
  932. //     CXTPTaskPanel::SetTheme
  933. //===========================================================================
  934. class _XTP_EXT_CLASS CXTPTaskPanelToolboxWhidbeyTheme : public CXTPTaskPanelToolboxTheme
  935. {
  936. public:
  937. //-------------------------------------------------------------------------
  938. // Summary:
  939. //     Constructs a CXTPTaskPanelToolboxWhidbeyTheme object.
  940. //-------------------------------------------------------------------------
  941. CXTPTaskPanelToolboxWhidbeyTheme();
  942. //-----------------------------------------------------------------------
  943. // Summary:
  944. //     This member is called to draw the background of the group caption.
  945. // Parameters:
  946. //     pDC    - Pointer to a valid device context.
  947. //     pGroup - Fill group caption of this group.
  948. //     rc     - Bounding rectangle of the group caption.
  949. // Returns:
  950. //     Bounding rectangle of text within group caption.
  951. // Remarks:
  952. //     This member will draw the Whidbey color gradient in the group
  953. //     caption rectangle.
  954. //-----------------------------------------------------------------------
  955. CRect DrawGroupCaptionBackground(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  956. //-----------------------------------------------------------------------
  957. // Summary:
  958. //     This method is called to draw the face of the group.
  959. // Parameters:
  960. //     pDC    - Pointer to a valid device context
  961. //     pGroup - Points to a CXTPTaskPanelGroup object.
  962. //     rc     - Rectangle of group to be draw.
  963. //-----------------------------------------------------------------------
  964. void DrawGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  965. //-----------------------------------------------------------------------
  966. // Summary:
  967. //     Fills group rectangle
  968. // Parameters:
  969. //     pDC - Pointer to a valid device context
  970. //     pGroup - Points to a CXTPTaskPanelGroup object
  971. //     rc - Rectangle of group to be draw.
  972. // See Also: DrawGroupClientFace
  973. //-----------------------------------------------------------------------
  974. void FillGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  975. //-----------------------------------------------------------------------
  976. // Summary:
  977. //     This method is called to fill background of task panel control.
  978. // Parameters:
  979. //     pDC - Pointer to a valid device context
  980. //     pTaskPanel - Points to a CXTPTaskPanel object
  981. //-----------------------------------------------------------------------
  982. void FillTaskPanel(CDC* pDC, CXTPTaskPanel* pTaskPanel);
  983. //-------------------------------------------------------------------------
  984. // Summary:
  985. //     This method is called to refresh the visual metrics of task panel.
  986. //-------------------------------------------------------------------------
  987. void RefreshMetrics();
  988. };
  989. //===========================================================================
  990. // Summary:
  991. //     The CXTPTaskPanelListViewTheme class is used to enable a List View style theme.
  992. // See Also:
  993. //     CXTPTaskPanel::SetTheme
  994. //===========================================================================
  995. class _XTP_EXT_CLASS CXTPTaskPanelListViewTheme : public CXTPTaskPanelToolboxTheme
  996. {
  997. public:
  998. //-------------------------------------------------------------------------
  999. // Summary:
  1000. //     Constructs a CXTPTaskPanelListViewTheme object.
  1001. //-------------------------------------------------------------------------
  1002. CXTPTaskPanelListViewTheme();
  1003. //-------------------------------------------------------------------------
  1004. // Summary:
  1005. //     This method is called to refresh the visual metrics of task panel.
  1006. //-------------------------------------------------------------------------
  1007. void RefreshMetrics();
  1008. };
  1009. //===========================================================================
  1010. // Summary:
  1011. //     The CXTPTaskPanelListViewOfficeXPTheme class is used to enable a List View Office XP style theme.
  1012. // See Also:
  1013. //     CXTPTaskPanel::SetTheme
  1014. //===========================================================================
  1015. class _XTP_EXT_CLASS CXTPTaskPanelListViewOfficeXPTheme : public CXTPTaskPanelListViewTheme
  1016. {
  1017. public:
  1018. //-------------------------------------------------------------------------
  1019. // Summary:
  1020. //     Constructs a CXTPTaskPanelListViewOfficeXPTheme object.
  1021. //-------------------------------------------------------------------------
  1022. CXTPTaskPanelListViewOfficeXPTheme();
  1023. //-------------------------------------------------------------------------
  1024. // Summary:
  1025. //     This method is called to refresh the visual metrics of task panel.
  1026. //-------------------------------------------------------------------------
  1027. void RefreshMetrics();
  1028. };
  1029. //===========================================================================
  1030. // Summary:
  1031. //     The CXTPTaskPanelListViewOffice2003Theme class is used to enable a List View Office 2003 style theme.
  1032. // See Also:
  1033. //     CXTPTaskPanel::SetTheme
  1034. //===========================================================================
  1035. class _XTP_EXT_CLASS CXTPTaskPanelListViewOffice2003Theme : public CXTPTaskPanelListViewOfficeXPTheme
  1036. {
  1037. public:
  1038. //-------------------------------------------------------------------------
  1039. // Summary:
  1040. //     Constructs a CXTPTaskPanelListViewOffice2003Theme object.
  1041. //-------------------------------------------------------------------------
  1042. CXTPTaskPanelListViewOffice2003Theme();
  1043. //-------------------------------------------------------------------------
  1044. // Summary:
  1045. //     This method is called to refresh the visual metrics of task panel.
  1046. //-------------------------------------------------------------------------
  1047. void RefreshMetrics();
  1048. CXTPPaintManagerColorGradient m_grcHot;         // Color gradient used to colorize "hot" items for this theme.
  1049. CXTPPaintManagerColorGradient m_grcPushed;      // Color gradient used to colorize "pushed" items for this theme.
  1050. //-----------------------------------------------------------------------
  1051. // Summary:
  1052. //     This member is called to draw the background of the group caption.
  1053. // Parameters:
  1054. //     pDC    - Pointer to a valid device context.
  1055. //     pGroup - Fill group caption of this group.
  1056. //     rc     - Bounding rectangle of the group caption.
  1057. // Returns:
  1058. //     Bounding rectangle of group caption.
  1059. // Remarks:
  1060. //     This member will draw the normal, hot, and pressed background for
  1061. //     the group caption.  It will then fill the group caption with the
  1062. //     Office 2003 color gradient.
  1063. //-----------------------------------------------------------------------
  1064. CRect DrawGroupCaptionBackground(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  1065. };
  1066. //===========================================================================
  1067. // Summary:
  1068. //     CXTPTaskPanelShortcutBarOffice2003Theme is a CXTPTaskPanelListViewOffice2003Theme
  1069. //     derived class used to enable an Office 2003 ShortcutBar style theme.
  1070. // See Also:
  1071. //     CXTPTaskPanel::SetTheme
  1072. //===========================================================================
  1073. class _XTP_EXT_CLASS CXTPTaskPanelShortcutBarOffice2003Theme : public CXTPTaskPanelListViewOffice2003Theme
  1074. {
  1075. public:
  1076. //-------------------------------------------------------------------------
  1077. // Summary:
  1078. //     Constructs a CXTPTaskPanelShortcutBarOffice2003Theme object.
  1079. //-------------------------------------------------------------------------
  1080. CXTPTaskPanelShortcutBarOffice2003Theme();
  1081. //-------------------------------------------------------------------------
  1082. // Summary:
  1083. //     This method is called to refresh the visual metrics of task panel.
  1084. //-------------------------------------------------------------------------
  1085. void RefreshMetrics();
  1086. protected:
  1087. //-----------------------------------------------------------------------
  1088. // Summary:
  1089. //     This member is called to draw the background of the group caption.
  1090. // Parameters:
  1091. //     pDC    - Pointer to a valid device context.
  1092. //     pGroup - Fill group caption of this group.
  1093. //     rc     - Bounding rectangle of the group caption.
  1094. // Returns:
  1095. //     Bounding rectangle of text within group caption.
  1096. // Remarks:
  1097. //     This member will draw the normal, hot, and pressed background for
  1098. //     the group caption.  It will then fill the group caption with the
  1099. //     Office 2003 color gradient.
  1100. //
  1101. //     This task panel theme looks similar to the ShortcutBar Office 2003
  1102. //     theme.
  1103. //-----------------------------------------------------------------------
  1104. CRect DrawGroupCaptionBackground(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  1105. //-----------------------------------------------------------------------
  1106. // Summary:
  1107. //     This method is called to draw the face of the group.
  1108. // Parameters:
  1109. //     pDC - Pointer to a valid device context
  1110. //     pGroup - Points to a CXTPTaskPanelGroup object
  1111. //     rc - Rectangle of group to be draw.
  1112. //-----------------------------------------------------------------------
  1113. void DrawGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  1114. //-----------------------------------------------------------------------
  1115. // Summary:
  1116. //     Fills group rectangle
  1117. // Parameters:
  1118. //     pDC - Pointer to a valid device context
  1119. //     pGroup - Points to a CXTPTaskPanelGroup object
  1120. //     rc - Rectangle of group to be draw.
  1121. // See Also: DrawGroupClientFace
  1122. //-----------------------------------------------------------------------
  1123. void FillGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  1124. //-----------------------------------------------------------------------
  1125. //     This method is called to fill background of task panel control.
  1126. // Parameters:
  1127. //     pDC - Pointer to a valid device context
  1128. //     pTaskPanel - Points to a CXTPTaskPanel object
  1129. //-----------------------------------------------------------------------
  1130. void FillTaskPanel(CDC* pDC, CXTPTaskPanel* pTaskPanel);
  1131. };
  1132. //===========================================================================
  1133. // Summary:
  1134. //     CXTPTaskPanelShortcutBarOffice2007Theme is a CXTPTaskPanelShortcutBarOffice2003Theme
  1135. //     derived class used to enable an Office 2007 ShortcutBar style theme.
  1136. // See Also:
  1137. //     CXTPTaskPanel::SetTheme
  1138. //===========================================================================
  1139. class _XTP_EXT_CLASS CXTPTaskPanelShortcutBarOffice2007Theme : public CXTPTaskPanelShortcutBarOffice2003Theme
  1140. {
  1141. public:
  1142. //-------------------------------------------------------------------------
  1143. // Summary:
  1144. //     Constructs a CXTPTaskPanelShortcutBarOffice2003Theme object.
  1145. //-------------------------------------------------------------------------
  1146. CXTPTaskPanelShortcutBarOffice2007Theme();
  1147. //-------------------------------------------------------------------------
  1148. // Summary:
  1149. //     This method is called to refresh the visual metrics of task panel.
  1150. //-------------------------------------------------------------------------
  1151. void RefreshMetrics();
  1152. protected:
  1153. //-----------------------------------------------------------------------
  1154. // Summary:
  1155. //     This member is called to draw the background of the group caption.
  1156. // Parameters:
  1157. //     pDC    - Pointer to a valid device context.
  1158. //     pGroup - Fill group caption of this group.
  1159. //     rc     - Bounding rectangle of the group caption.
  1160. // Returns:
  1161. //     Bounding rectangle of text within group caption.
  1162. // Remarks:
  1163. //     This member will draw the normal, hot, and pressed background for
  1164. //     the group caption.  It will then fill the group caption with the
  1165. //     Office 2003 color gradient.
  1166. //
  1167. //     This task panel theme looks similar to the ShortcutBar Office 2003
  1168. //     theme.
  1169. //-----------------------------------------------------------------------
  1170. CRect DrawGroupCaptionBackground(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  1171. //-----------------------------------------------------------------------
  1172. // Summary:
  1173. //     This method is called to draw the face of the group.
  1174. // Parameters:
  1175. //     pDC - Pointer to a valid device context
  1176. //     pGroup - Points to a CXTPTaskPanelGroup object
  1177. //     rc - Rectangle of group to be draw.
  1178. //-----------------------------------------------------------------------
  1179. void DrawGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  1180. //-----------------------------------------------------------------------
  1181. // Summary:
  1182. //     Fills group rectangle
  1183. // Parameters:
  1184. //     pDC - Pointer to a valid device context
  1185. //     pGroup - Points to a CXTPTaskPanelGroup object
  1186. //     rc - Rectangle of group to be draw.
  1187. // See Also: DrawGroupClientFace
  1188. //-----------------------------------------------------------------------
  1189. void FillGroupClientFace(CDC* pDC, CXTPTaskPanelGroup* pGroup, CRect rc);
  1190. //-----------------------------------------------------------------------
  1191. //     This method is called to fill background of task panel control.
  1192. // Parameters:
  1193. //     pDC - Pointer to a valid device context
  1194. //     pTaskPanel - Points to a CXTPTaskPanel object
  1195. //-----------------------------------------------------------------------
  1196. void FillTaskPanel(CDC* pDC, CXTPTaskPanel* pTaskPanel);
  1197. void DrawGroupItemFrame(CDC* pDC, CXTPTaskPanelGroupItem* pItem, CRect rc);
  1198. protected:
  1199. COLORREF m_clrShortcutItemShadow;
  1200. };
  1201. }
  1202. using namespace XTPTaskPanelPaintThemes;
  1203. AFX_INLINE XTP_TASKPANEL_GROUPCOLORS* CXTPTaskPanelPaintManager::GetGroupColors(BOOL bSpecial) {
  1204. return bSpecial ? &m_groupSpecial : &m_groupNormal;
  1205. }
  1206. AFX_INLINE void CXTPTaskPanelPaintManager::SetTextFormat(int nTextFormat, BOOL bCaption /*= FALSE*/) {
  1207. if (bCaption) m_nCaptionTextFormat = nTextFormat; else m_nItemTextFormat = nTextFormat;
  1208. }
  1209. #endif // !defined(__XTPTASKPANELPAINTMANAGER_H__)