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

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarControlPaintManager.h: interface for the CXTPCalendarControlPaintManager class.
  2. //
  3. // This file is a part of the XTREME CALENDAR 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(_XTPCALENDARPAINTMANAGER_H__)
  22. #define _XTPCALENDARPAINTMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "Common/XTPColorManager.h"
  28. #include "XTPCalendarViewPart.h"
  29. #include "XTPCalendarPtrCollectionT.h"
  30. #include "XTPCalendarNotifications.h"
  31. //===========================================================================
  32. // Summary:
  33. //     This helper macro is used to declare paint manager drawing parts.
  34. //         <b>theClass</b> - Part name.
  35. //         <b>parentClass</b> - Parent part name.
  36. //     There are two paint manager methods available to access declared
  37. //          part object:
  38. //          <b> CPartName* GetPartName();           </b>
  39. //          <b> void SetPartName(CPartName* pPart); </b>
  40. //              Where PartName is the name of the declared part.
  41. //
  42. // Example:
  43. // <code>
  44. // declaration in the paint manager class
  45. // BEGIN_VIEW_PART(PartClass1, ParentPartClass1)
  46. // ...
  47. // END_VIEW_PART(PartClass1)
  48. //
  49. // // in the implementation
  50. // CPaintManagerClassName::CPartClass1* pPart1 = pPainManObj->GetPartClass1();
  51. // </code>
  52. // See Also: END_VIEW_PART, CXTPCalendarPaintManager
  53. //===========================================================================
  54. #define BEGIN_VIEW_PART(theClass, parentClass)
  55. //{{AFX_CODEJOCK_PRIVATE
  56. #undef BEGIN_VIEW_PART
  57. #define BEGIN_VIEW_PART(theClass, parentClass)
  58. class C##theClass  : public C##parentClass
  59. {
  60. public:
  61. C##theClass(CXTPCalendarViewPart* pParentPart = NULL)
  62. : C##parentClass(pParentPart)
  63. {
  64. }
  65. //}}AFX_CODEJOCK_PRIVATE
  66. //===========================================================================
  67. // Summary:
  68. //     This helper macro is used to declare paint manager drawing parts.
  69. //         theClass    - Part name.
  70. //
  71. // See Also: BEGIN_VIEW_PART, CXTPCalendarPaintManager
  72. //===========================================================================
  73. #define END_VIEW_PART(theClass)
  74. //{{AFX_CODEJOCK_PRIVATE
  75. #undef END_VIEW_PART
  76. #define END_VIEW_PART(theClass)
  77. };
  78. friend class C##theClass;
  79. protected:
  80. C##theClass* m_p##theClass;
  81. public:
  82. C##theClass* Get##theClass() {
  83. return m_p##theClass;
  84. }
  85. void Set##theClass(C##theClass* p##theClass)
  86. {
  87. POSITION pos = m_lstViewParts.Find(m_p##theClass);
  88. ASSERT(pos);
  89. m_lstViewParts.RemoveAt(pos);
  90. delete m_p##theClass;
  91. m_p##theClass = p##theClass;
  92. m_lstViewParts.AddTail(p##theClass);
  93. p##theClass->m_pPaintManager = this;
  94. }
  95. //}}AFX_CODEJOCK_PRIVATE
  96. //===========================================================================
  97. // Remarks:
  98. //     Determines allowable values for the alignment of clock images used
  99. //     by the DrawClock function.
  100. //===========================================================================
  101. enum XTPCalendarClockAlignFlags
  102. {
  103. xtpCalendarClockAlignLeft     = 0x01, // Align to the left side of the rectangle area.
  104. xtpCalendarClockAlignCenter   = 0x02, // Align on the middle of the rectangle area.
  105. xtpCalendarClockAlignRight    = 0x04  // Align to the right side of the rectangle area.
  106. };
  107. class CXTPCalendarControl;
  108. class CXTPCalendarDayView;
  109. class CXTPCalendarDayViewDay;
  110. class CXTPCalendarDayViewGroup;
  111. class CXTPCalendarMonthView;
  112. class CXTPCalendarWeekView;
  113. class CXTPCalendarDayViewEvent;
  114. class CXTPCalendarMonthViewEvent;
  115. class CXTPCalendarWeekViewEvent;
  116. class CXTPCalendarViewEvent;
  117. class CXTPCalendarDayViewTimeScale;
  118. /////////////////////////////////////////////////////////////////////////////
  119. // CXTPCalendarPaintManager command target
  120. //===========================================================================
  121. // Summary:
  122. //     Utility class, handles most of the drawing activities.
  123. // Remarks:
  124. //     It stores all settings, needed by control to perform drawing operations :
  125. //     fonts, colors, styles for all others classes of control. It also implements
  126. //     all functions for drawing typical graphical primitives, functions that
  127. //     directly work with device context.
  128. //     Can be overridden to provide another look and feel for the control.
  129. //     Thus, you have an easy way to change the "skin" of your control. Just provide
  130. //     your own implementation of CXTPCalendarControlPaintManager and don't
  131. //     touch the functionality of any of the other control classes.
  132. //
  133. //          Create a CXTPCalendarControlPaintManager by calling its constructor.
  134. //          Furthermore, you can call get and set functions to change
  135. //          settings as needed.
  136. //===========================================================================
  137. class _XTP_EXT_CLASS CXTPCalendarPaintManager : public CXTPCmdTarget
  138. {
  139. friend class CXTPCalendarViewPart;
  140. public:
  141. //-----------------------------------------------------------------------
  142. // Summary:
  143. //     Paint manager's ControlPart is used as parent for the
  144. //     other parts of the control.
  145. //-----------------------------------------------------------------------
  146. BEGIN_VIEW_PART(ControlPart, XTPCalendarViewPart)
  147. //-------------------------------------------------------------------
  148. // Summary:
  149. //     Performs refreshing of graphical related parameters from
  150. //     system settings.
  151. //-------------------------------------------------------------------
  152. virtual void RefreshMetrics() {
  153. m_clrTextColor.SetStandardValue(m_pPaintManager->m_clrButtonFaceText);
  154. m_clrBackground.SetStandardValue(m_pPaintManager->m_clrButtonFace);
  155. LOGFONT lfIcon;
  156. VERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lfIcon), &lfIcon, 0));
  157. m_fntText.SetStandardValue(&lfIcon);
  158. }
  159. END_VIEW_PART(ControlPart)
  160. //-----------------------------------------------------------------------
  161. //## Day View related drawing.
  162. //-----------------------------------------------------------------------
  163. //-----------------------------------------------------------------------
  164. // Summary:
  165. //     This paint manager part is used to draw the time scale header,
  166. //     'Now' line, and the expand signs for the Day View.
  167. //-----------------------------------------------------------------------
  168. BEGIN_VIEW_PART(DayViewTimeScaleHeaderPart, XTPCalendarViewPart)
  169. //-------------------------------------------------------------------
  170. // Summary:
  171. //     This member function is used to draw the time scale header.
  172. // Parameters:
  173. //     pDC     - Pointer to a valid device context.
  174. //     pView   - A CXTPCalendarDayView pointer that contains the Day
  175. //               View object.
  176. //     rc      - The time scale header's bounding rectangle.
  177. //     strText - A CString object that contains the header text.
  178. //-------------------------------------------------------------------
  179. virtual void OnDraw(CDC* pDC, CXTPCalendarDayView* pView, CRect rc, CString strText);
  180. //-------------------------------------------------------------------
  181. // Summary:
  182. //     This member function is used to draw the 'Now' line.
  183. // Parameters:
  184. //     pDC       - Pointer to a valid device context.
  185. //     pView     - A CXTPCalendarDayView pointer to the Day View object.
  186. //     rc        - A CRect that contains the Time scale bounding rectangle.
  187. //     y         - An int that contains the 'Now' line position.
  188. //     bDrawBk   - If FALSE, then draw only the line. If TRUE,
  189. //                 then draw the line and the gradient fill.
  190. //-------------------------------------------------------------------
  191. virtual void DrawNowLine(CDC* pDC, CXTPCalendarDayView* pView, CRect rc,
  192.  int y, BOOL bDrawBk = FALSE);
  193. //-------------------------------------------------------------------
  194. // Summary:
  195. //     This member function is used to draw expand signs.
  196. // Parameters:
  197. //     pDC       - Pointer to a valid device context.
  198. //     pView     - A CXTPCalendarDayView pointer to the Day View object.
  199. //     rcTSHours - A CRect that contains the Time scale hours rectangle.
  200. //-------------------------------------------------------------------
  201. virtual void DrawExpandSigns(CDC* pDC, CXTPCalendarDayView* pView, const CRect& rcTSHours);
  202. END_VIEW_PART(DayViewTimeScaleHeaderPart)
  203. //-----------------------------------------------------------------------
  204. // Summary:
  205. //     This paint manager part is used to draw time scale time cells
  206. //     for the Day View.
  207. //-----------------------------------------------------------------------
  208. BEGIN_VIEW_PART(DayViewTimeScaleCellPart, DayViewTimeScaleHeaderPart)
  209. CXTPCalendarViewPartFontValue m_fntTimeText; // Time text font.
  210. int m_nHourWidth; // Width of hour part of the text in pixels.
  211. int m_nMinWidth; // Width of minutes (am/pm) part of the text in pixels.
  212. //-------------------------------------------------------------------
  213. // Summary:
  214. //     This member function is used to refresh the graphical
  215. // related parameters using system settings.
  216. //-------------------------------------------------------------------
  217. virtual void RefreshMetrics();
  218. //-------------------------------------------------------------------
  219. // Summary:
  220. //     This member function is used to adjust the time text font size.
  221. // Parameters:
  222. //     pDC    - Pointer to a valid device context.
  223. //     rcCell - A CRect object that contains the time scale hour cell
  224. //              bounding rectangle.
  225. //-------------------------------------------------------------------
  226. void AdjustTimeFont(CDC* pDC, CRect rcCell);
  227. //-------------------------------------------------------------------
  228. // Summary:
  229. //     This member function is used to adjust the time text font size.
  230. // Parameters:
  231. //     pDC     - Pointer to a valid device context.
  232. //     strHour - A CString object that contains the Hour text.
  233. //     strMin  - A CString object that contains the Minutes text.
  234. //     nHourHeight - A hour big text height.
  235. //     nWidth  - An int that returns the width of time scale with
  236. //               provided hour and minutes texts.
  237. //-------------------------------------------------------------------
  238. void CalcWidth(CDC* pDC, const CString& strHour, const CString& strMin,
  239. int nHourHeight, int& nWidth);
  240. //-------------------------------------------------------------------
  241. // Summary:
  242. //     This member function is used to draw the hour cell.
  243. // Parameters:
  244. //     pDC             - Pointer to a valid device context.
  245. //     rc              - A CRect object that contains the time scale
  246. //                       hour cell bounding rectangle.
  247. //     strText         - A CString object that contains the time text.
  248. //     bFillBackground - A BOOL. If TRUE, then fill the background before drawing.
  249. //                       If FALSE, then do not fill the background before drawing.
  250. //-------------------------------------------------------------------
  251. virtual void DrawHourCell(CDC* pDC, CRect rc, CString strText, BOOL bFillBackground = TRUE);
  252. //-------------------------------------------------------------------
  253. // Summary:
  254. //     This member function is used to draw the big hour cell.
  255. // Parameters:
  256. //     pDC             - Pointer to a valid device context.
  257. //     rc              - A CRect object that contains the time scale
  258. //                       hour cell bounding rectangle.
  259. //     strHour         - A CString object that contains the Hour text.
  260. //     strMin          - A CString object that contains the Minutes text.
  261. //     nRowPerHour     - An int that contains the Rows per hour.
  262. //     bFillBackground - A BOOL. If TRUE, then fill the background before drawing.
  263. //                       If FALSE, then do not fill the background before drawing.
  264. //-------------------------------------------------------------------
  265. virtual void DrawBigHourCell(CDC* pDC, CRect rc, CString strHour, CString strMin,
  266.  int nRowPerHour, BOOL bFillBackground = TRUE);
  267. END_VIEW_PART(DayViewTimeScaleCellPart)
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //     This paint manager part is used as the base class for the parts
  271. //     which draw different kinds of no all-day-cells (work/non-work)
  272. //     for the Day View.
  273. //-----------------------------------------------------------------------
  274. BEGIN_VIEW_PART(DayViewCellPart, XTPCalendarViewPart)
  275. CXTPPaintManagerColor m_clrBackgroundSlave;
  276. CXTPPaintManagerColor m_clrShadow; // Cell background color.
  277. CXTPPaintManagerColor m_clrHour;   // Cell border color.
  278. //-------------------------------------------------------------------
  279. // Summary:
  280. //     This member function is used to fill out cell parameters with
  281. //     default values.
  282. // Parameters:
  283. //     pViewGroup  - [in] A CXTPCalendarDayViewGroup pointer to the Day View Group object.
  284. //     rCellParams - [in, out] A XTP_CALENDAR_DAYVIEWCELL_PARAMS object that contains
  285. //                   the cell's parameters.
  286. //-------------------------------------------------------------------
  287. virtual void GetParams(CXTPCalendarDayViewGroup* pViewGroup, XTP_CALENDAR_DAYVIEWCELL_PARAMS& rCellParams);
  288. //-------------------------------------------------------------------
  289. // Summary:
  290. //     This member function is used to draw the day view with no
  291. //     all-day-cells.
  292. // Parameters:
  293. //     pDC         - Pointer to a valid device context.
  294. //     pViewGroup  - A CXTPCalendarDayViewGroup pointer to the Day View Group object.
  295. //     rc          - A CRect object that contains the cell's bounding rectangle.
  296. //     cellParams  - A XTP_CALENDAR_DAYVIEWCELL_PARAMS object that contains
  297. //                   the cell's parameters.
  298. //-------------------------------------------------------------------
  299. virtual void OnDraw(CDC* pDC, CXTPCalendarDayViewGroup* pViewGroup,
  300. CRect rc, const XTP_CALENDAR_DAYVIEWCELL_PARAMS& cellParams);
  301. END_VIEW_PART(DayViewCellPart)
  302. //-----------------------------------------------------------------------
  303. // Summary:
  304. //     This paint manager part is used to draw a day view that contains
  305. //     no all day work time cells.
  306. //-----------------------------------------------------------------------
  307. BEGIN_VIEW_PART(DayViewWorkCellPart, DayViewCellPart)
  308. //-------------------------------------------------------------------
  309. // Summary:
  310. //     This member function is used to perform the refreshing of
  311. //     graphical related parameters from system settings.
  312. //-------------------------------------------------------------------
  313. virtual void RefreshMetrics();
  314. END_VIEW_PART(DayViewWorkCellPart)
  315. //-----------------------------------------------------------------------
  316. // Summary:
  317. //     This paint manager part is used to draw "no all day non-work"
  318. //     time cells for the Day View.
  319. //-----------------------------------------------------------------------
  320. BEGIN_VIEW_PART(DayViewNonworkCellPart, DayViewCellPart)
  321. //-------------------------------------------------------------------
  322. // Summary:
  323. //     This member function is used to perform refreshing of
  324. //     graphical related parameters from system settings.
  325. //-------------------------------------------------------------------
  326. virtual void RefreshMetrics();
  327. END_VIEW_PART(DayViewNonworkCellPart)
  328. //-----------------------------------------------------------------------
  329. // Summary:
  330. //     This paint manager part is used to draw days headers for
  331. //     the Day View.
  332. //-----------------------------------------------------------------------
  333. BEGIN_VIEW_PART(DayMonthViewHeaderPart, XTPCalendarViewPart)
  334. CXTPPaintManagerColor m_clrTopLeftBorder;   // Top and Left borders color.
  335. //-------------------------------------------------------------------
  336. // Summary:
  337. //     This member function is used to perform refreshing of
  338. //     graphical related parameters from system settings.
  339. //-------------------------------------------------------------------
  340. virtual void RefreshMetrics() {
  341. m_clrTopLeftBorder.SetStandardValue(RGB(255, 255, 255));
  342. }
  343. END_VIEW_PART(DayMonthViewHeaderPart)
  344. //-----------------------------------------------------------------------
  345. // Summary:
  346. //     This paint manager part is used to draw days headers for
  347. //     the Day View.
  348. //-----------------------------------------------------------------------
  349. BEGIN_VIEW_PART(DayViewHeaderPart, DayMonthViewHeaderPart)
  350. //-------------------------------------------------------------------
  351. // Summary:
  352. //     This member function is used to draw the day header.
  353. // Parameters:
  354. //     pDC      - Pointer to a valid device context.
  355. //     pViewDay - A CXTPCalendarDayViewDay pointer to the Day View
  356. //                object.
  357. //     rc       - A CRect object that contains the coordinates of
  358. //                the Header's bounding rectangle.
  359. //     strText  - A CString object that contains the Header text.
  360. //-------------------------------------------------------------------
  361. virtual void OnDraw(CDC* pDC, CXTPCalendarDayViewDay* pViewDay, CRect rc,
  362. CString strText);
  363. END_VIEW_PART(DayViewHeaderPart)
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     This paint manager part is used to draw Groups headers for
  367. //     the Day View.
  368. //-----------------------------------------------------------------------
  369. BEGIN_VIEW_PART(DayViewGroupHeaderPart, DayMonthViewHeaderPart)
  370. //-------------------------------------------------------------------
  371. // Summary:
  372. //     This member function is used to draw the day header.
  373. // Parameters:
  374. //     pDC      - Pointer to a valid device context.
  375. //     pViewGroup - A CXTPCalendarDayViewGroup pointer to the Group
  376. //                  object.
  377. //     rc       - A CRect object that contains the coordinates of
  378. //                the Header's bounding rectangle.
  379. //     strText  - A CString object that contains the Header text.
  380. //-------------------------------------------------------------------
  381. virtual void OnDraw(CDC* pDC, CXTPCalendarDayViewGroup* pViewGroup,
  382. CRect rc, CString strText);
  383. END_VIEW_PART(DayViewGroupHeaderPart)
  384. //-----------------------------------------------------------------------
  385. // Summary:
  386. //     This paint manager part is used to draw all day events area for
  387. //     the Day View.
  388. //-----------------------------------------------------------------------
  389. BEGIN_VIEW_PART(DayViewAllDayEventsPart, XTPCalendarViewPart)
  390. //-------------------------------------------------------------------
  391. // Summary:
  392. //     This member functions is used to perform refreshing of graphical
  393. //      related parameters from system settings.
  394. //-------------------------------------------------------------------
  395. virtual void RefreshMetrics() {
  396. m_clrBackground.SetStandardValue(m_pPaintManager->m_clr3DShadow);
  397. }
  398. //-------------------------------------------------------------------
  399. // Summary:
  400. //     This member function is used to draw the all-day events area.
  401. // Parameters:
  402. //     pDC       - Pointer to a valid device context.
  403. //     pViewGroup - A CXTPCalendarDayViewGroup pointer to the Group object.
  404. //     rc        - A CRect object that contains the all-day events
  405. //                 area bounding rectangle coordinates.
  406. //     bSelected - A BOOL. TRUE if the draw area is selected. FALSE otherwise.
  407. //-------------------------------------------------------------------
  408. virtual void OnDraw(CDC* pDC, CXTPCalendarDayViewGroup* pViewGroup,
  409. CRect rc, BOOL bSelected);
  410. END_VIEW_PART(DayViewAllDayEventsPart)
  411. //-----------------------------------------------------------------------
  412. // Summary:
  413. //     This paint manager part is used to draw events for
  414. //     the Day View.
  415. //-----------------------------------------------------------------------
  416. BEGIN_VIEW_PART(DayViewEventPart, XTPCalendarViewPart)
  417. //-------------------------------------------------------------------
  418. // Summary:
  419. //     Performs refreshing of graphical related parameters from
  420. //      system settings.
  421. //-------------------------------------------------------------------
  422. virtual void RefreshMetrics() {
  423. m_clrBackground.SetStandardValue(RGB(255, 255, 255));
  424. }
  425. //-------------------------------------------------------------------
  426. // Summary:
  427. //     This member function is used to draw an event.
  428. // Parameters:
  429. //     pDC         - Pointer to a valid device context.
  430. //     pViewEvent  - A CXTPCalendarDayViewEvent pointer to the Day
  431. //                   Event View object.
  432. //-------------------------------------------------------------------
  433. virtual void OnDraw(CDC* pDC, CXTPCalendarDayViewEvent* pViewEvent);
  434. END_VIEW_PART(DayViewEventPart)
  435. //-----------------------------------------------------------------------
  436. //## Month View related drawing
  437. //-----------------------------------------------------------------------
  438. //-----------------------------------------------------------------------
  439. // Summary:
  440. //     This paint manager part is used to draw days grid and to fill
  441. //     days cells background for the Month View.
  442. //-----------------------------------------------------------------------
  443. BEGIN_VIEW_PART(MonthViewGridPart, XTPCalendarViewPart)
  444. CXTPPaintManagerColor m_clrBackground2; // Second background color which is used to fill days background.
  445. //-------------------------------------------------------------------
  446. // Summary:
  447. //     Performs refreshing of graphical related parameters from
  448. //      system settings.
  449. //-------------------------------------------------------------------
  450. virtual void RefreshMetrics();
  451. //-------------------------------------------------------------------
  452. // Summary:
  453. //     This member function is used to draw the days grid and to fill
  454. //     the days cells background.
  455. // Parameters:
  456. //     pDC         - Pointer to a valid device context.
  457. //     pMonthView  - A CXTPCalendarMonthView pointer to the Month View object.
  458. //-------------------------------------------------------------------
  459. virtual void OnDrawGrid(CDC* pDC, CXTPCalendarMonthView* pMonthView);
  460. END_VIEW_PART(MonthViewGridPart)
  461. //-----------------------------------------------------------------------
  462. // Summary:
  463. //     This paint manager part is used to draw week days headers for
  464. //     the Month View.
  465. //-----------------------------------------------------------------------
  466. BEGIN_VIEW_PART(MonthViewHeaderPart, DayMonthViewHeaderPart)
  467. //-------------------------------------------------------------------
  468. // Summary:
  469. //     This member function is used to draw the week day header.
  470. // Parameters:
  471. //     pDC         - Pointer to a valid device context.
  472. //     pMonthView  - A CXTPCalendarMonthView pointer to the Month
  473. //                   View object.
  474. //     rc          - A CRect object that contains the Week Day header's
  475. //                   bounding rectangle coordinates.
  476. //     nCollIndex  - An int that contains the Week Day column index in the grid.
  477. //     strText     - A CString object that contains the formatted Week Day name.
  478. //-------------------------------------------------------------------
  479. virtual void OnDraw(CDC* pDC, CXTPCalendarMonthView* pMonthView,
  480. CRect rc, int nCollIndex, CString strText);
  481. END_VIEW_PART(MonthViewHeaderPart)
  482. //-----------------------------------------------------------------------
  483. // Summary:
  484. //     This paint manager part is used to draw events and day dates
  485. //     for the Month View.
  486. //-----------------------------------------------------------------------
  487. BEGIN_VIEW_PART(MonthViewEventPart, XTPCalendarViewPart)
  488. COLORREF m_clrTextHighLightColor;       // Text color for the selected event.
  489. COLORREF m_clrMultiDayEventFrameColor;  // Multi-day event frame color.
  490. COLORREF m_clrClassicUnderline;         // Underline color for today day.
  491. CXTPPaintManagerColorGradient m_grclrClassicSelDay;// Gradient color for today day.
  492. //-------------------------------------------------------------------
  493. // Summary:
  494. //     Performs refreshing of graphical related parameters from
  495. //     system settings.
  496. //-------------------------------------------------------------------
  497. virtual void RefreshMetrics() {
  498. m_clrTextHighLightColor = RGB(255, 255, 255);
  499. m_clrMultiDayEventFrameColor = RGB(0, 0, 0);
  500. m_clrBackground.SetStandardValue(RGB(255, 255, 213));
  501. m_grclrClassicSelDay.SetStandardValue(m_clrBackground, RGB(217, 214, 202));
  502. m_clrClassicUnderline = RGB(10, 36, 106);
  503. }
  504. //-------------------------------------------------------------------
  505. // Summary:
  506. //     This member function is used to draw an event.
  507. // Parameters:
  508. //     pDC        - Pointer to a valid device context.
  509. //     pViewEvent - A CXTPCalendarMonthViewEvent pointer to the Month Event View object.
  510. //-------------------------------------------------------------------
  511. virtual void OnDrawEvent(CDC* pDC, CXTPCalendarMonthViewEvent* pViewEvent);
  512. //-------------------------------------------------------------------
  513. // Summary:
  514. //     This member function is used to draw the week day header.
  515. // Parameters:
  516. //     pDC       - Pointer to a valid device context.
  517. //     rc        - A CRect object that contains the Day header's bounding
  518. //                 rectangle coordinates.
  519. //     bToday    - TRUE for today day, otherwise FALSE.
  520. //     bSelected - Is day selected.
  521. //     strText   - Formatted day date string.
  522. //-------------------------------------------------------------------
  523. virtual void OnDrawDayDate(CDC* pDC, CRect rc, BOOL bToday,
  524. BOOL bSelected, CString strText);
  525. END_VIEW_PART(MonthViewEventPart)
  526. //-----------------------------------------------------------------------
  527. //## Week view related drawing
  528. //-----------------------------------------------------------------------
  529. //-----------------------------------------------------------------------
  530. // Summary:
  531. //     This paint manager part is used to draw week days grid and
  532. //     headers for the Week View.
  533. //-----------------------------------------------------------------------
  534. BEGIN_VIEW_PART(WeekViewPart, XTPCalendarViewPart)
  535. COLORREF m_clrTextHighLightColor;   // Text color for the selected day header.
  536. COLORREF m_clrTextNormalColor;      // Text color for the day header and some other elements.
  537. COLORREF m_clrHeaderBottomLine;     // Text color for the day header bottom line.
  538. //-------------------------------------------------------------------
  539. // Summary:
  540. //     Performs refreshing of graphical related parameters from
  541. //     system settings.
  542. //-------------------------------------------------------------------
  543. virtual void RefreshMetrics();
  544. //-------------------------------------------------------------------
  545. // Summary:
  546. //     This member function is used to draw an event.
  547. // Parameters:
  548. //     pDC       - Pointer to a valid device context.
  549. //     pWeekView - A CXTPCalendarWeekView pointer to the Week Event View object.
  550. //-------------------------------------------------------------------
  551. virtual void OnDraw(CDC* pDC, CXTPCalendarWeekView* pWeekView);
  552. //-------------------------------------------------------------------
  553. // Summary:
  554. //     This member function is used to draw the day header.
  555. // Parameters:
  556. //     pDC             - Pointer to a valid device context.
  557. //     rcDay           - A CRect object that contains the day's bounding
  558. //                       rectangle coordinates.
  559. //     nHeaderHeight   - An int that contains the header height value.
  560. //     strHeader       - A CString object that contains the header text.
  561. //     bIsCurrent      - A BOOL. TRUE if this is the current day for today. FALSE otherwise.
  562. //     bIsSelected     - A BOOL. TRUE if the day is selected.  FALSE otherwise.
  563. //-------------------------------------------------------------------
  564. virtual void DrawDayHeader(CDC* pDC, CRect rcDay, int nHeaderHeight, CString strHeader,
  565. BOOL bIsCurrent = FALSE, BOOL bIsSelected = FALSE);
  566. END_VIEW_PART(WeekViewPart)
  567. //-----------------------------------------------------------------------
  568. // Summary:
  569. //     This paint manager part is used to draw events for the
  570. //     Week View.
  571. //-----------------------------------------------------------------------
  572. BEGIN_VIEW_PART(WeekViewEventPart, XTPCalendarViewPart)
  573. COLORREF m_clrTextHighLightColor;   // Text color for the selected event.
  574. COLORREF m_clrTextNormalColor;      // Text color for the event.
  575. //-------------------------------------------------------------------
  576. // Summary:
  577. //     This member function is used to perform refreshing of
  578. //     graphical related parameters from system settings.
  579. //-------------------------------------------------------------------
  580. virtual void RefreshMetrics() {
  581. m_clrBackground.SetStandardValue(m_pPaintManager->GetWeekViewPart()->GetBackgroundColor()); // RGB(255, 255, 213));
  582. m_clrTextColor.SetStandardValue(m_pPaintManager->m_clrButtonFaceText);
  583. m_clrTextHighLightColor = RGB(255, 255, 255);
  584. m_clrTextNormalColor = m_pPaintManager->m_clrButtonFaceText;
  585. LOGFONT lfIcon;
  586. VERIFY(::SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lfIcon), &lfIcon, 0));
  587. m_fntText.SetStandardValue(&lfIcon);
  588. }
  589. //-------------------------------------------------------------------
  590. // Summary:
  591. //     This member function is used to draw the specified event.
  592. // Parameters:
  593. //     pDC             - Pointer to a valid device context.
  594. //     pWeekViewEvent  - A CXTPCalendarWeekViewEvent pointer to the Week Event View object.
  595. //-------------------------------------------------------------------
  596. virtual void OnDraw(CDC* pDC, CXTPCalendarWeekViewEvent* pWeekViewEvent);
  597. //-------------------------------------------------------------------
  598. // Summary:
  599. //     This member functions is used to draw the event border.
  600. // Parameters:
  601. //     pDC             - Pointer to a valid device context.
  602. //     rcView          - A CRect that contains the day view's bounding rectangle coordinates.
  603. //     pWeekViewEvent  - A CXTPCalendarWeekViewEvent pointer to the Week Event View object.
  604. //-------------------------------------------------------------------
  605. virtual void DrawBorder(CDC* pDC, CRect rcView, CXTPCalendarWeekViewEvent* pWeekViewEvent);
  606. //-------------------------------------------------------------------
  607. // Summary:
  608. //     This member function is used to draw the event's times texts or icons.
  609. // Parameters:
  610. //     pDC             - Pointer to a valid device context.
  611. //     pWeekViewEvent  - A CXTPCalendarWeekViewEvent pointer to the Week Event View object.
  612. //-------------------------------------------------------------------
  613. virtual int DrawTimes(CDC* pDC, CXTPCalendarWeekViewEvent* pWeekViewEvent);
  614. //-------------------------------------------------------------------
  615. // Summary:
  616. //     This member function is used to draw the event subject.
  617. // Parameters:
  618. //     pDC             - Pointer to a valid device context.
  619. //     pWeekViewEvent  - A CXTPCalendarWeekViewEvent pointer to the Week Event View object.
  620. //-------------------------------------------------------------------
  621. virtual void DrawSubj(CDC* pDC, CXTPCalendarWeekViewEvent* pWeekViewEvent);
  622. END_VIEW_PART(WeekViewEventPart)
  623. public:
  624. //-----------------------------------------------------------------------
  625. // Summary:
  626. //     Default paint manager constructor.
  627. // Remarks:
  628. //     Handles initial initialization.
  629. // See Also: RefreshMetrics()
  630. //-----------------------------------------------------------------------
  631. CXTPCalendarPaintManager();
  632. //-----------------------------------------------------------------------
  633. // Summary:
  634. //     Default paint manager destructor.
  635. // Remarks:
  636. //     Handles member items deallocation.
  637. //-----------------------------------------------------------------------
  638. virtual ~CXTPCalendarPaintManager();
  639. public:
  640. //-----------------------------------------------------------------------
  641. // Summary:
  642. //     This member function is used to obtain current paint theme.
  643. // Returns:
  644. //     A paint theme ID from enum XTPCalendarTheme.
  645. //-----------------------------------------------------------------------
  646. virtual XTPCalendarTheme GetPaintTheme() const;
  647. //-----------------------------------------------------------------------
  648. // Summary:
  649. //     This member function is used to set current paint theme.
  650. // Parameters:
  651. //     ePaintTheme - A paint theme ID from enum XTPCalendarTheme.
  652. //-----------------------------------------------------------------------
  653. virtual void SetPaintTheme(XTPCalendarTheme ePaintTheme);
  654. //-----------------------------------------------------------------------
  655. // Summary:
  656. //     This member function is used to initialize all drawing defaults.
  657. // Remarks:
  658. //     Initializes all drawings defaults (fonts, colors, etc.).
  659. //     most of defaults are system defaults.
  660. //-----------------------------------------------------------------------
  661. virtual void RefreshMetrics();
  662. //-----------------------------------------------------------------------
  663. // Summary:
  664. //     This member function is used to draw an arbitrary line.
  665. // Parameters:
  666. //     pDC  - Pointer to a valid device context.
  667. //     xPos - An int that contains the Horizontal coordinate of the beginning of line.
  668. //     yPos - An int that contains the Vertical coordinate of the beginning of line.
  669. //     cx   - An int that contains the Horizontal coordinate of the end of line.
  670. //     cy   - An int that contains the Vertical coordinate of the end of line.
  671. // Remarks:
  672. //     This member function is used anywhere a simple arbitrary line is needed.
  673. //-----------------------------------------------------------------------
  674. virtual void DrawLine(CDC* pDC, int xPos, int yPos, int cx, int cy);
  675. //-----------------------------------------------------------------------
  676. // Summary:
  677. //     This member function is used to draw a Horizontal line.
  678. // Parameters:
  679. //     pDC - Pointer to a valid device context.
  680. //     xPos   - An int that contains the Horizontal coordinate of the beginning of the line.
  681. //     yPos   - An int that contains the Vertical coordinate of the beginning of the line.
  682. //     cx  - An int that contains the Length of the line.
  683. // Remarks:
  684. //     This member function is used anywhere a simple horizontal line is needed.
  685. //-----------------------------------------------------------------------
  686. virtual void DrawHorizontalLine(CDC* pDC, int xPos, int yPos, int cx);
  687. //-----------------------------------------------------------------------
  688. // Summary:
  689. //     This member function is used to draw a Vertical line.
  690. // Parameters:
  691. //     pDC - Pointer to a valid device context.
  692. //     xPos   - An int that contains the Horizontal coordinates of the beginning of the line.
  693. //     yPos   - An int that contains the Vertical coordinates of the beginning of the line.
  694. //     cy  - An int that contains the Length of the line.
  695. //     pPen - A CPen pointer to the pen object used to draw the line.
  696. // Remarks:
  697. //     This member function is used anywhere a simple vertical line is needed.
  698. //-----------------------------------------------------------------------
  699. virtual void DrawVerticalLine(CDC* pDC, int xPos, int yPos, int cy);
  700. //-----------------------------------------------------------------------
  701. // Summary:
  702. //     This member function is used to draw the time as clock.
  703. // Parameters:
  704. //     pDC           - Pointer to a valid device context.
  705. //     dtClockTime   - A COleDateTime object that contains the time to draw.
  706. //     rcView        - A CRect object that contains the bounding rectangle
  707. //                     coordinates of where the clock is drawn.
  708. //     clrBackground - A COLORREF object that contains the background color of the clock.
  709. //     cafAlign      - A XTPCalendarClockAlignFlags alignment flag, appropriate values are determined by
  710. //                     enum XTPCalendarClockAlignFlags.
  711. // Remarks:
  712. //     This member function is used anywhere a time clock is needed.
  713. // Returns:
  714. //      Returns the size (width) of the square where clock icon was drawn inside.
  715. //      Zero when clock icon wasn't successfully drawn.
  716. // See Also: enum XTPCalendarClockAlignFlags determines alignment flags.
  717. //-----------------------------------------------------------------------
  718. virtual int DrawClock(CDC* pDC, COleDateTime dtClockTime, CRect rcView, COLORREF clrBackground, XTPCalendarClockAlignFlags cafAlign);
  719. //-----------------------------------------------------------------------
  720. // Summary:
  721. //     This member function is used to draw a bitmap from the provided ImageList.
  722. // Parameters:
  723. //     pImageList  - A CImageList pointer to the ImageList.
  724. //     pDC         - Pointer to a valid device context.
  725. //     rcView      - A CRect object that contains the bounding rectangle
  726. //                   coordinates to draw the bitmap.
  727. //     iIcon       - An int that contains the image index.
  728. //     uFlags      - Additional drawing options. Should be 0 or DT_VCENTER.
  729. // Remarks:
  730. //     Use this function to draw a bitmap in the view's bounding rectangle.
  731. //     If the provided bounding rectangle is too small, then the bitmap is not drawn.
  732. // Returns:
  733. //     An int that contains the width of the drawn bitmap.
  734. //-----------------------------------------------------------------------
  735. virtual int DrawBitmap(CImageList* pImageList, CDC* pDC, CRect rcView,
  736. int iIcon, UINT uFlags = 0);
  737. //-----------------------------------------------------------------------
  738. // Summary:
  739. //     This member function is used to draw the bitmap using its resource id.
  740. // Parameters:
  741. //     nIDResource - A UINT that contains the integer resource id of the bitmap.
  742. //     pDC         - Pointer to a valid device context.
  743. //     rcBitmap    - A CRect that contains the bounding rectangle coordinates
  744. //                   used to draw the bitmap.
  745. // Remarks:
  746. //     Use this function to draw a bitmap in the view's bounding rectangle.
  747. //     If the provided bounding rectangle is too small, then the bitmap is not drawn.
  748. // Returns:
  749. //     An int that contains the width of the drawn bitmap.
  750. //-----------------------------------------------------------------------
  751. virtual int DrawBitmap(UINT nIDResource, CDC* pDC,  CRect rcBitmap);
  752. //-----------------------------------------------------------------------
  753. // Summary:
  754. //     This member function is used to draw the Glyph symbol using special
  755. //     font.
  756. // Parameters:  //
  757. //     pDC      - Pointer to a valid device context.
  758. //     rc       - A CRect that contains the bounding rectangle coordinates
  759. //                used to draw the symbol.
  760. //     ch       - A char symbol (from the font) to draw.
  761. // Remarks:
  762. //     Use this function to draw the Glyph symbol in the center
  763. //     of the provided bounding rectangle.
  764. // Returns:
  765. //     An int that contains the width of the drawn symbol.
  766. //-----------------------------------------------------------------------
  767. virtual int DrawIconChar(CDC* pDC, CRect rc, TCHAR ch);
  768. // ----------------------------------------------------------------------
  769. // Summary:
  770. //     This member function is used to obtain the horizontal and vertical
  771. //     size of the bitmap.
  772. // Parameters:
  773. //     nIDResource :  A UINT that contains the integer resource id of the
  774. //                    bitmap.
  775. // Returns:
  776. //     A CSize object that contains the size of the bitmap.
  777. // ----------------------------------------------------------------------
  778. virtual CSize GetBitmapSize(UINT nIDResource);
  779. //-----------------------------------------------------------------------
  780. // Summary:
  781. //     This member function is used to obtain the horizontal and vertical
  782. //     size of the Expand Sign bitmap.
  783. // Returns:
  784. //     A CSize object that contains the bitmap size.
  785. //-----------------------------------------------------------------------
  786. virtual const CSize GetExpandSignSize();
  787. //-----------------------------------------------------------------------
  788. // Summary:
  789. //     This member function is used to obtain the horizontal and vertical
  790. //     size of the Clock.
  791. // Returns:
  792. //     A CSize object that contains the bitmap size.
  793. //-----------------------------------------------------------------------
  794. virtual CSize GetClockSize();
  795. //-----------------------------------------------------------------------
  796. // Summary:
  797. //     This member function is used to set the CXTPCalendarControl object
  798. //     for the CXTPCalendarPaintManager.
  799. // Parameters:
  800. //     pControl - A CXTPCalendarControl pointer to the CXTPCalendarControl object
  801. //-----------------------------------------------------------------------
  802. virtual void SetControl(CXTPCalendarControl* pControl);
  803. //-----------------------------------------------------------------------
  804. // Summary:
  805. //     Call this member function to draw the shadow regions around the
  806. //     rectangle.
  807. // Parameters:
  808. //     pDC    - Pointer to a valid device context.
  809. //     rcRect - A CRect that contains the rectangle coordinates of where
  810. //              to draw the shadow regions.
  811. //-----------------------------------------------------------------------
  812. virtual void DrawShadow(CDC* pDC, const CRect& rcRect);
  813. //-----------------------------------------------------------------------
  814. // Summary:
  815. //     Call this member function to draw icons corresponding to the event
  816. //     state.
  817. // Parameters:
  818. //     pDC    - Pointer to a valid device context.
  819. //      pViewEvent - A CXTPCalendarViewEvent pointer to the event view object.
  820. //-----------------------------------------------------------------------
  821. virtual int DrawIcons(CDC* pDC, CXTPCalendarViewEvent* pViewEvent);
  822. //-----------------------------------------------------------------------
  823. // Summary:
  824. //     This member function is used to draw the Header.
  825. // Parameters:
  826. //     pDC     - Pointer to a valid device context.
  827. //      rcHeader    - A CRect that contains the bounding rectangle coordinates
  828. //                    used to draw the header.
  829. //      bIsSelected - A BOOL. TRUE if the header is selected. FALSE otherwise.
  830. //      bIsCurrent  - A BOOL. TRUE if the header represents the current time.
  831. //                    FALSE otherwise.
  832. //     grclr           - A CXTPPaintManagerColorGradient object that specifies the Gradient color.
  833. //     clrUnderLineHdr - A COLORREF object that specifies the color of header's underline.
  834. //-----------------------------------------------------------------------
  835. virtual void DrawHeader(CDC* pDC, CRect& rcHeader, BOOL bIsSelected,
  836. BOOL bIsCurrent);
  837. virtual void DrawHeader(CDC* pDC, CRect& rcHeader, BOOL bIsSelected,
  838. BOOL bIsCurrent, const CXTPPaintManagerColorGradient& grclr, COLORREF clrUnderLineHdr); // <combine CXTPCalendarPaintManager::DrawHeader@CDC*@CRect&@BOOL@BOOL>
  839. //-----------------------------------------------------------------------
  840. // Summary:
  841. //     This member function is used to fill the area using the corresponding
  842. //     busy color or pattern.
  843. // Parameters:
  844. //     pDC         - Pointer to a valid device context.
  845. //     rcRect      - A CRect object that contains the rectangle coordinates
  846. //                   used to fill the corresponding busy color or pattern.
  847. //     eBusyStatus - An int that contains the Event Busy Status value from
  848. //                   enum XTPCalendarEventBusyStatus.
  849. //     rgnBusy     - A CRgn that contains the region area used to fill with the
  850. //                   corresponding busy color or pattern and draw the region
  851. //                   border using m_clrWindowText color.
  852. // See Also: enum XTPCalendarEventBusyStatus determines Event Busy Status,
  853. //           CRgn.
  854. //-----------------------------------------------------------------------
  855. virtual void DrawBusyStatus(CDC* pDC, CRect& rcRect, int eBusyStatus);
  856. virtual void DrawBusyStatus(CDC* pDC, CRgn& rgnBusy, int eBusyStatus); // <combine CXTPCalendarPaintManager::DrawBusyStatus@CDC*@CRect&@int>
  857. //-----------------------------------------------------------------------
  858. // Summary:
  859. //     This member function is used to enable a new theme.
  860. // Parameters:
  861. //     bEnableTheme - A BOOL. TRUE if the theme enabled.  FALSE otherwise.
  862. //-----------------------------------------------------------------------
  863. void EnableTheme(BOOL bEnableTheme);
  864. //-----------------------------------------------------------------------
  865. // Summary:
  866. //     This member function is used to obtain the status of the theme.
  867. // Returns:
  868. //     A BOOL. TRUE if theme is enabled. FALSE otherwise.
  869. //-----------------------------------------------------------------------
  870. BOOL IsThemeEnabled();
  871. //-----------------------------------------------------------------------
  872. // Summary:
  873. //     Call this member function to determine the current Windows XP
  874. //     theme that is in use.
  875. // Returns:
  876. //     A XTPCurrentSystemTheme enumeration that represents the
  877. //     current Windows theme in use, can be one of the following
  878. //     values:
  879. //     xtpSystemThemeUnknown - No known theme in use, or Windows Classic theme.
  880. //     xtpSystemThemeBlue    - Blue theme in use.
  881. //     xtpSystemThemeOlive   - Olive theme in use.
  882. //     xtpSystemThemeSilver  - Silver theme in use.
  883. //-----------------------------------------------------------------------
  884. XTPCurrentSystemTheme GetCurrentSystemTheme();
  885. public:
  886. //===========================================================================
  887. // Summary:
  888. //     This is a helper class which handles shadows drawing (for events, etc)
  889. //===========================================================================
  890. class CXTPShadowDrawer
  891. {
  892. public:
  893. CXTPShadowDrawer(CDC* pDC, double dMaxAlpha);
  894. virtual ~CXTPShadowDrawer();
  895. static COLORREF AlphaPixel(const COLORREF crPixel, const UINT i);
  896. static int CheckValue(int iValue);
  897. enum XTPShadowPart {
  898. // Regular theme - Office 2003
  899. xtpShadowLR = 0,
  900. xtpShadowTB = 1,
  901. xtpShadowTR = 2,
  902. xtpShadowBR = 3,
  903. xtpShadowBL = 4,
  904. // Office 2007 Theme
  905. xtpShadow2007Right      = 5,
  906. xtpShadow2007Bottom     = 6,
  907. xtpShadow2007TopRight   = 7,
  908. xtpShadow2007BottomRight= 8,
  909. xtpShadow2007BottomLeft = 9
  910. };
  911. // Generic drawing of the shadow rectangle part
  912. void DrawShadowRectPart(const CRect& rcShadow, const XTPShadowPart part);
  913. // Methods for Office 2003 theme
  914. void ApplyShadowLR(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  915. void ApplyShadowTB(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  916. void ApplyShadowTR(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  917. void ApplyShadowBR(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  918. void ApplyShadowBL(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  919. // methods for Office 2007 theme
  920. void ApplyShadow2007Right(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  921. void ApplyShadow2007Bottom(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  922. void ApplyShadow2007TR(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  923. void ApplyShadow2007BL(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  924. void ApplyShadow2007BR(UINT* pBitmap, const ULONG ulBitmapWidth, const ULONG ulBitmapHeight);
  925. protected:
  926. CDC* m_pDC; // drawing device context
  927. double m_dMaxAlpha; // maximal shadow alpha grade
  928. private:
  929. };
  930. private:
  931. CSize m_szExpandSign;   // Cached size of the expand sign
  932. protected:
  933. //-----------------------------------------------------------------------
  934. // Summary:
  935. //     Call this member function to add the specified ViewPart object
  936. //     to the parts list.
  937. // Parameters:
  938. //     pPart - Pointer to a 'View Part' object.
  939. // Returns:
  940. //     Pointer to a 'View Part' object.
  941. //-----------------------------------------------------------------------
  942. CXTPCalendarViewPart* AddViewPart(CXTPCalendarViewPart* pPart);
  943. public:
  944. CXTPPaintManagerColor m_clrButtonFace;     // Stores standard Button Face color.
  945. CXTPPaintManagerColor m_clrButtonFaceText; // Stores standard color to display text.
  946. CXTPPaintManagerColor m_clrWindow;         // Stores standard windows color.
  947. CXTPPaintManagerColor m_clrWindowText;     // Stores standard color to display window text.
  948. CXTPPaintManagerColor m_clr3DShadow;       // Stores standard color to display shadow items.
  949. CXTPPaintManagerColor m_clrHighlight;      // Stores standard color to display highlighted items.
  950. CXTPPaintManagerColorGradient  m_grclrToday;         // Gradient color of today's header.
  951. //-----------------------------------------------------------------------
  952. // Summary:
  953. //      Call this member function to set custom brush to draw event busy status.
  954. // Parameters:
  955. //      nBusyStatus      - Busy status value.
  956. //      pBrush           - Pointer to a brush object.
  957. //      bAutodeleteBrush - This parameter indicates should be a brush object
  958. //                         deleted when destroy or other brush is set.
  959. //                         If TRUE - brush object will be deleted automatically.
  960. // Example:
  961. // <code>
  962. //
  963. //  m_wndCalendar.GetPaintManager()->SetBusyStatusBrush(
  964. //      xtpCalendarBusyStatusFree, new CBrush(RGB(240, 255, 250)), TRUE);
  965. //
  966. //  m_wndCalendar.GetPaintManager()->SetBusyStatusBrush(
  967. //      xtpCalendarBusyStatusTentative, new CBrush(RGB(240, 120, 250)), TRUE);
  968. //
  969. //  m_wndCalendar.GetPaintManager()->SetBusyStatusBrush(
  970. //      100, new CBrush(RGB(240, 120, 250)), TRUE);
  971. //
  972. // </code>
  973. //-----------------------------------------------------------------------
  974. void SetBusyStatusBrush(int nBusyStatus, CBrush* pBrush, BOOL bAutodeleteBrush);
  975. //-----------------------------------------------------------------------
  976. // Summary:
  977. //      Call this member function to get a brush to draw event busy status.
  978. // Parameters:
  979. //      nBusyStatus      - Busy status value.
  980. // Returns:
  981. //     Pointer to a brush object.
  982. //-----------------------------------------------------------------------
  983. CBrush* GetBusyStatusBrush(int nBusyStatus);
  984. //-----------------------------------------------------------------------
  985. // Summary:
  986. //     This member function returns set of flags which define calendar items
  987. //     to send XTP_NC_CALENDAR_GETITEMTEXT notification.
  988. // Returns:
  989. //     Set of flags from enums XTPCalendarGetItemText, XTPCalendarGetItemTextEx.
  990. // See Also:
  991. //     XTPCalendarGetItemText, XTPCalendarGetItemTextEx,
  992. //     SetAskItemTextFlags, CXTPCalendarControl::GetAskItemTextFlags,
  993. //     CXTPCalendarTheme::GetAskItemTextFlags,
  994. //     CXTPCalendarTheme::SetAskItemTextFlags, XTP_NC_CALENDAR_GETITEMTEXT
  995. //-----------------------------------------------------------------------
  996. DWORD GetAskItemTextFlags() const;
  997. //-----------------------------------------------------------------------
  998. // Summary:
  999. //     This member function is used to set flags which define calendar items
  1000. //     to send XTP_NC_CALENDAR_GETITEMTEXT notification.
  1001. // Parameters:
  1002. //      dwFlags - Set of flags from enums XTPCalendarGetItemText,
  1003. //                XTPCalendarGetItemTextEx.
  1004. // See Also:
  1005. //     XTPCalendarGetItemText, XTPCalendarGetItemTextEx,
  1006. //     GetAskItemTextFlags, CXTPCalendarControl::GetAskItemTextFlags,
  1007. //     CXTPCalendarTheme::GetAskItemTextFlags,
  1008. //     CXTPCalendarTheme::SetAskItemTextFlags, XTP_NC_CALENDAR_GETITEMTEXT
  1009. //-----------------------------------------------------------------------
  1010. void SetAskItemTextFlags(DWORD dwFlags);
  1011. protected:
  1012. CList<CXTPCalendarViewPart*, CXTPCalendarViewPart*> m_lstViewParts; // Collection to store ViewParts objects.
  1013. //-----------------------------------------------------------------------
  1014. // Summary: Enumerates types of expand signs drawn on a day view.
  1015. //-----------------------------------------------------------------------
  1016. enum XTPEnumExpandSigns
  1017. {
  1018. idxExpandSignUp = 0,    // Expand sign: arrow up
  1019. idxExpandSignDown = 1   // Expand sign: arrow down
  1020. };
  1021. CImageList  m_ilExpandSigns; // Stores standard Expand Signs icons.
  1022. CImageList  m_ilGlyphs;     // Stores standard glyphs for displaying events. Used when glyphs font is not installed.
  1023. CFont*      m_pGlyphsFont;  // Stores standard glyphs font for displaying events.
  1024. CBitmap     m_bmpTentativePattern;  // Stores standard bitmap pattern to draw Tentative event busy status.
  1025. CBrush      m_brushTentative;       // Stores standard brush to draw Tentative event busy status.
  1026. CXTPCalendarTypedPtrAutoDeleteArray<CPtrArray, CXTPCalendarViewPartBrushValue*>
  1027. m_arBusyStatusBrushes; // Stores customizable brush values to draw Event Busy Status in the Day View.
  1028. //-----------------------------------------------------------------------
  1029. // Summary: Returns drawing brush value for a specific busy status.
  1030. // Parameters:
  1031. //     eBusyStatus - Busy status enumeration.
  1032. //     bGrow       - Append a new brush value if needed or not.
  1033. // Returns:
  1034. //     Pointer to CXTPCalendarViewPartBrushValue array member.
  1035. // See Also:
  1036. //     XTPCalendarEventBusyStatus
  1037. //-----------------------------------------------------------------------
  1038. CXTPCalendarViewPartBrushValue* _GetAtGrow_BusyStatusBrushValue(int eBusyStatus, BOOL bGrow);
  1039. //-----------------------------------------------------------------------
  1040. // Summary:
  1041. //     Set default colors/patterns to fill Busy Status area.
  1042. //-----------------------------------------------------------------------
  1043. virtual void InitBusyStatusDefaultColors();
  1044. CSize m_szClockRect;                     // Stores dimensions for a rectangle used to display the time as a clock glyph.
  1045. CXTPCalendarControl* m_pControl;         // Stores a pointer to a CXTPCalendarControl object.
  1046. BOOL m_bEnableTheme;                     // True to enable Luna theme.
  1047. COLORREF m_clrUnderLineHdr;              // Color of header's underline.
  1048. XTPCurrentSystemTheme m_CurrSystemTheme; // Current theme flag.
  1049. XTPCalendarTheme m_nPaintTheme;          // Store the Paint Theme;
  1050. DWORD m_dwAskItemTextFlags;              // Store flag set to send XTP_NC_CALENDAR_GETITEMTEXT notification.
  1051. protected:
  1052. };
  1053. /////////////////////////////////////////////////////////////////////////////
  1054. AFX_INLINE XTPCalendarTheme CXTPCalendarPaintManager::GetPaintTheme() const {
  1055. return m_nPaintTheme;
  1056. }
  1057. AFX_INLINE void CXTPCalendarPaintManager::SetPaintTheme(XTPCalendarTheme ePaintTheme) {
  1058. m_nPaintTheme = min(xtpCalendarThemeOffice2003, ePaintTheme);
  1059. RefreshMetrics();
  1060. }
  1061. AFX_INLINE XTPCurrentSystemTheme CXTPCalendarPaintManager::GetCurrentSystemTheme(){
  1062. return m_CurrSystemTheme;
  1063. }
  1064. AFX_INLINE CSize CXTPCalendarPaintManager::GetClockSize(){
  1065. return m_szClockRect;
  1066. }
  1067. AFX_INLINE BOOL CXTPCalendarPaintManager::IsThemeEnabled(){
  1068. return m_bEnableTheme;
  1069. }
  1070. AFX_INLINE void CXTPCalendarPaintManager::EnableTheme(BOOL bEnableTheme){
  1071. m_bEnableTheme = bEnableTheme;
  1072. RefreshMetrics();
  1073. }
  1074. AFX_INLINE DWORD CXTPCalendarPaintManager::GetAskItemTextFlags() const {
  1075. return m_dwAskItemTextFlags;
  1076. }
  1077. AFX_INLINE void CXTPCalendarPaintManager::SetAskItemTextFlags(DWORD dwFlags) {
  1078. m_dwAskItemTextFlags = dwFlags;
  1079. }
  1080. /////////////////////////////////////////////////////////////////////////////
  1081. #endif // !defined(_XTPCALENDARPAINTMANAGER_H__)