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

对话框与窗口

开发平台:

Visual C++

  1. // XTPReportPaintManager.h: interface for the CXTPReportPaintManager class.
  2. //
  3. // This file is a part of the XTREME REPORTCONTROL 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(__XTPREPORTPAINTMANAGER_H__)
  22. #define __XTPREPORTPAINTMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPReportDefines.h"
  28. #include "Common/XTPColorManager.h"
  29. #include "Common/XTPWinThemeWrapper.h"
  30. class CXTPReportControl;
  31. class CXTPReportRow;
  32. class CXTPReportHeader;
  33. class CXTPReportColumn;
  34. class CXTPReportGroupRow;
  35. class CXTPReportInplaceButton;
  36. class CXTPReportHyperlink;
  37. class CXTPReportRecordItem;
  38. class CXTPReportRecordItemControl;
  39. struct XTP_REPORTRECORDITEM_DRAWARGS;
  40. struct XTP_REPORTRECORDITEM_METRICS;
  41. //===========================================================================
  42. // Summary:
  43. //      This class used to store MulDivC formula parameters and perform calculation.
  44. //      MulDivC formula if the folowing:
  45. //      x = y * Mul / Div + C
  46. //===========================================================================
  47. class _XTP_EXT_CLASS CXTPFormulaMulDivC : public CXTPCmdTarget
  48. {
  49. public:
  50. //-----------------------------------------------------------------------
  51. // Summary:
  52. //     Default object constructor.
  53. //-----------------------------------------------------------------------
  54. CXTPFormulaMulDivC();
  55. //-----------------------------------------------------------------------
  56. // Summary:
  57. //     Default object destructor.
  58. //-----------------------------------------------------------------------
  59. virtual ~CXTPFormulaMulDivC();
  60. //-----------------------------------------------------------------------
  61. // Summary:
  62. //     Perform formula calculation.
  63. // Parameters:
  64. //     nY - A 'y' formula parameter value.
  65. // Returns:
  66. //      Returns value calculated by formula: y * Mul / Div + C
  67. //-----------------------------------------------------------------------
  68. virtual int Calculate(int nY) const;
  69. //-----------------------------------------------------------------------
  70. // Summary:
  71. //      Set formula parameters.
  72. // Parameters:
  73. //      nMul - A multiplier value.
  74. //      nDiv - A divisor value.
  75. //      nC   - A constant value.
  76. //-----------------------------------------------------------------------
  77. virtual void SetStandardValue(int nMul, int nDiv, int nC);
  78. //-----------------------------------------------------------------------
  79. // Summary:
  80. //      Get formula parameters.
  81. // Parameters:
  82. //      rnMul - An int reference to receive multiplier value.
  83. //      rnDiv - An int reference to receive divisor value.
  84. //      rnC   - An int reference to receive constant value.
  85. //-----------------------------------------------------------------------
  86. virtual void GetStandardValue(int& rnMul, int& rnDiv, int& rnC);
  87. protected:
  88. int m_nMultiplier;  // Store a multiplier value.
  89. int m_nDivisor;     // Store a divisor value.
  90. int m_nConstant;    // Store a constant value.
  91. };
  92. //===========================================================================
  93. // Summary:
  94. //     Represents predefined grid line styles:
  95. // Example:
  96. //     <code>m_wndReport.SetGridStyle(FALSE, xtpReportGridLargeDots);</code>
  97. // See Also: CXTPReportControl::SetGridStyle
  98. //
  99. // <KEYWORDS xtpReportGridNoLines, xtpReportGridSmallDots, xtpReportGridLargeDots, xtpReportGridDashes, xtpReportGridSolid>
  100. //===========================================================================
  101. enum XTPReportGridStyle
  102. {
  103. xtpReportGridNoLines,       // empty line
  104. xtpReportGridSmallDots,     // line is drawn with small dots
  105. xtpReportGridLargeDots,     // line is drawn with large dots
  106. xtpReportGridDashes,        // line is drawn with dashes
  107. xtpReportGridSolid          // draws solid line
  108. };
  109. //===========================================================================
  110. // Summary:
  111. //     Represents predefined freeze column line styles:
  112. //===========================================================================
  113. enum XTPReportFreezeColsDividerStyle
  114. {
  115. xtpReportFreezeColsDividerThin      = 0x01,  // thin line style
  116. xtpReportFreezeColsDividerBold      = 0x02,  // bold line style
  117. xtpReportFreezeColsDividerHeader    = 0x04,  // header line style
  118. xtpReportFreezeColsDividerShade     = 0x08,  // shade line style
  119. };
  120. //{{AFX_CODEJOCK_PRIVATE
  121. // deprecated
  122. #define xtpGridNoLines      xtpReportGridNoLines
  123. #define xtpGridSmallDots    xtpReportGridSmallDots
  124. #define xtpGridLargeDots    xtpReportGridLargeDots
  125. #define xtpGridDashes       xtpReportGridDashes
  126. #define xtpGridSolid        xtpReportGridSolid
  127. //}}AFX_CODEJOCK_PRIVATE
  128. //===========================================================================
  129. // Summary:
  130. //     Represents predefined column styles.
  131. // Example:
  132. //     <code>m_wndReport.GetPaintManager()->m_columnStyle = xtpReportColumnFlat;</code>
  133. // See Also: CXTPReportPaintManager::m_columnStyle, CXTPReportPaintManager
  134. //
  135. // <KEYWORDS xtpReportColumnShaded, xtpReportColumnFlat>
  136. //===========================================================================
  137. enum XTPReportColumnStyle
  138. {
  139. xtpReportColumnShaded,      // Columns are gray shaded.
  140. xtpReportColumnFlat,        // Flat style for drawing columns.
  141. xtpReportColumnExplorer,    // Explorer column style
  142. xtpReportColumnOffice2003,  // Gradient column style
  143. xtpReportColumnOffice2007   // Office 2007 column style
  144. };
  145. //{{AFX_CODEJOCK_PRIVATE
  146. // deprecated
  147. #define xtpColumnShaded xtpReportColumnShaded
  148. #define xtpColumnFlat   xtpReportColumnFlat
  149. //}}AFX_CODEJOCK_PRIVATE
  150. //-----------------------------------------------------------------------
  151. // Summary:
  152. //     Represent the style of lines used to draw a hierarchical tree structure.
  153. // Example:
  154. //     <code>m_wndReport.GetPaintManager()->m_treeStructureStyle = xtpReportTreeStructureSolid;</code>
  155. // See Also: CXTPReportPaintManager::m_treeStructureStyle, CXTPReportPaintManager
  156. //
  157. // <KEYWORDS xtpReportTreeStructureNone, xtpReportTreeStructureSolid>
  158. //-----------------------------------------------------------------------
  159. enum XTPReportTreeStructureStyle
  160. {
  161. xtpReportTreeStructureNone,     // No lines will be drawn from the parent node to each child node.
  162. xtpReportTreeStructureSolid,    // Lines will be drawn from the parent node to each child node at the next level.
  163. xtpReportTreeStructureDots      // Dots will be drawn from the parent node to each child node at the next level.
  164. };
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     Represent the Header/Footer rows devider style.
  168. //-----------------------------------------------------------------------
  169. enum XTPReportFixedRowsDividerStyle
  170. {
  171. xtpReportFixedRowsDividerNone       = 0x00, // no line
  172. xtpReportFixedRowsDividerThin       = 0x01, // thin style
  173. xtpReportFixedRowsDividerBold       = 0x02, // bold style
  174. xtpReportFixedRowsDividerShade      = 0x04, // shaded line style
  175. xtpReportFixedRowsDividerOutlook    = 0x08  // outlook line style
  176. };
  177. //===========================================================================
  178. // Summary:
  179. //     Utility class, handling most of the drawing activities. It stores
  180. //     all settings, needed by a control to perform drawing operations:
  181. //     fonts, colors, styles for all other classes of control.
  182. //     It also implements all functions for drawing typical graphical
  183. //     primitives, functions that directly work with device context.
  184. // Remarks:
  185. //     Could be overridden to provide another look and feel for the control.
  186. //     Thus you have an easy way to change "skin" of your control; just provide
  187. //     your own implementation of CXTPReportPaintManager and there's no need to touch
  188. //     functionality all others classes of control
  189. //
  190. //     You create ReportPaintManager by calling its constructor,
  191. //     further you can call getter and setter functions to change
  192. //     every setting as you wish.
  193. // See Also: CXTPReportControl overview, CXTPReportRow, CXTPReportGroupRow,
  194. //           CXTPReportColumn, CXTPReportHeader
  195. //===========================================================================
  196. class _XTP_EXT_CLASS CXTPReportPaintManager : public CXTPCmdTarget
  197. {
  198. //{{AFX_CODEJOCK_PRIVATE
  199. friend class CXTPReportControl;
  200. //}}AFX_CODEJOCK_PRIVATE
  201. public:
  202. //-----------------------------------------------------------------------
  203. // Summary:
  204. //     Default paint manager constructor, handles properties initialization.
  205. // See Also: RefreshMetrics
  206. //-----------------------------------------------------------------------
  207. CXTPReportPaintManager();
  208. //-----------------------------------------------------------------------
  209. // Summary:
  210. //     Default paint manager destructor, handles member items deallocation.
  211. //-----------------------------------------------------------------------
  212. virtual ~CXTPReportPaintManager();
  213. public:
  214. //-----------------------------------------------------------------------
  215. // Summary:
  216. //     Initializes all drawings defaults (fonts, colors, etc.). Most
  217. //     of them are system defaults.
  218. // See Also: CXTPReportPaintManager
  219. //-----------------------------------------------------------------------
  220. virtual void RefreshMetrics();
  221. //-----------------------------------------------------------------------
  222. // Summary:
  223. //     Returns default row height for print mode.
  224. // Parameters:
  225. //     pDC   - Pointer to the used Device Context.
  226. //     pRow  - Pointer to CXTPReportRow object.
  227. //     nTotalWidth - Width of the row
  228. // Returns:
  229. //     The height of the default rectangle where row's items will draw.
  230. // Example:
  231. //     <code>int nRowHeight = GetRowHeight(pDC, pRow)</code>
  232. //-----------------------------------------------------------------------
  233. virtual int GetRowHeight(CDC* pDC, CXTPReportRow* pRow);
  234. virtual int GetRowHeight(CDC* pDC, CXTPReportRow* pRow, int nTotalWidth); // <combine CXTPReportPaintManager::GetRowHeight@CDC*@CXTPReportRow*>
  235. //-----------------------------------------------------------------------
  236. // Summary:
  237. //     Returns preview item height for print mode.
  238. // Parameters:
  239. //     pDC   - Pointer to the used Device Context.
  240. //     pRow  - Pointer to CXTPReportRow object.
  241. //     nWidth - Width of the preview item.
  242. //     nHeight - Height of the preview item.
  243. // Returns:
  244. //     The height of the default rectangle where preview item will draw.
  245. // Example:
  246. //     <code>int nPreviewItemHeight = GetPreviewItemHeight(pDC, pRow, nWidth, nHeight)</code>
  247. //-----------------------------------------------------------------------
  248. virtual int GetPreviewItemHeight(CDC* pDC, CXTPReportRow* pRow, int nWidth, int nHeight);
  249. //-----------------------------------------------------------------------
  250. // Summary:
  251. //     Returns the default column header height.
  252. // Returns:
  253. //     The current height of the rectangle where column's headers draw.
  254. //-----------------------------------------------------------------------
  255. virtual int GetHeaderHeight();
  256. //-----------------------------------------------------------------------
  257. // Summary:
  258. //     Calculate optimal header height.
  259. // Parameters:
  260. //     pDC          - Pointer to device context.
  261. //     pControl     - Pointer to a report control.
  262. //     nTotalWidth  - Total header with. Used for printing only.
  263. // Returns:
  264. //     Optimal header height.
  265. //-----------------------------------------------------------------------
  266. virtual int GetHeaderHeight(CXTPReportControl* pControl, CDC* pDC, int nTotalWidth = 0);
  267. //-----------------------------------------------------------------------
  268. // Summary:
  269. // Summary:
  270. //     Calculate optimal footer height.
  271. // Parameters:
  272. //     pDC          - Pointer to device context.
  273. //     pControl     - Pointer to a report control.
  274. //     nTotalWidth  - Total header with. Used for printing only.
  275. // Returns:
  276. //     Optimal footer height.
  277. //-----------------------------------------------------------------------
  278. virtual int GetFooterHeight(CXTPReportControl* pControl, CDC* pDC, int nTotalWidth = 0);
  279. //-----------------------------------------------------------------------
  280. // Summary:
  281. //     Returns control background color.
  282. // Parameters:
  283. //     pControl - Pointer to the parent report control object.
  284. // Returns:
  285. //     Color that is used for filling client rect.
  286. //-----------------------------------------------------------------------
  287. virtual COLORREF GetControlBackColor(CXTPReportControl* pControl);
  288. //-----------------------------------------------------------------------
  289. // Summary:
  290. //     Fills the provided row with its background color.
  291. // Parameters:
  292. //     pDC     - Pointer to the used Device Context.
  293. //     pRow    - Pointer to the Row.
  294. //     rcRow   - Row area rectangle coordinates.
  295. // Example:
  296. // <code>
  297. // // paint row background
  298. // pPaintManager->FillRow(pDC, this, rcRow);
  299. // </code>
  300. //-----------------------------------------------------------------------
  301. virtual void FillRow(CDC* pDC, CXTPReportRow* pRow, CRect rcRow);
  302. //-----------------------------------------------------------------------
  303. // Summary:
  304. //     Draws control's grid.
  305. // Parameters:
  306. //     pDC       - Pointer to the used Device Context.
  307. //     bVertical - boolean value determines orientation of grid
  308. //     rc        - Row area rectangle coordinates.
  309. // Example:
  310. // <code>
  311. // // draw vertical grid in Row
  312. // CRect rcGridItem(rcRowRect);
  313. // pPaintManager->DrawGrid(pDC, TRUE, rcGridItem);
  314. //
  315. // // draw horizontal grid in Row
  316. // CPaintDC pDC(this);
  317. // CRect rcGridItem(rcRowRect);
  318. // pPaintManager->DrawGrid(pDC, FALSE, rcGridItem);
  319. // </code>
  320. //-----------------------------------------------------------------------
  321. virtual void DrawGrid(CDC* pDC, BOOL bVertical, CRect rc);
  322. //-----------------------------------------------------------------------
  323. // Summary:
  324. //     Draws the freeze column divider.
  325. // Parameters:
  326. //     pDC   - Pointer to the used Device Context.
  327. //     rc - Rectangle coordinates.
  328. //     pControl - Pointer to a report control.
  329. //     pRow  - Pointer to the Group Row.
  330. //-----------------------------------------------------------------------
  331. virtual void DrawFreezeColsDivider(CDC* pDC, const CRect& rc, CXTPReportControl* pControl,
  332.    CXTPReportRow* pRow = NULL);
  333. //-----------------------------------------------------------------------
  334. // Summary:
  335. //     Draws group row.
  336. // Parameters:
  337. //     pDC   - Pointer to the used Device Context.
  338. //     pRow  - Pointer to the Group Row.
  339. //     rcRow - Group Row area rectangle coordinates.
  340. //     pMetrics - Pointer to a XTP_REPORTRECORDITEM_METRICS object.
  341. // Example:
  342. // <code>
  343. // CXTPReportPaintManager* pPaintManager = m_pControl->GetPaintManager();
  344. // pDC->SetBkMode(TRANSPARENT);
  345. // pPaintManager->DrawGroupRow(pDC, this, rcRow);
  346. // </code>
  347. //-----------------------------------------------------------------------
  348. virtual void DrawGroupRow(CDC* pDC, CXTPReportGroupRow* pRow, CRect rcRow, XTP_REPORTRECORDITEM_METRICS* pMetrics);
  349. //-----------------------------------------------------------------------
  350. // Summary:
  351. //      Fill font and colors members of the metrics structure
  352. //      for the specified group row.
  353. // Parameters:
  354. //      pRow        - Pointer to the Group Row.
  355. //      pMetrics    - Pointer to the metrics structure to be filled.
  356. //      bPrinting   - Is printing mode.
  357. //-----------------------------------------------------------------------
  358. virtual void FillGroupRowMetrics(CXTPReportGroupRow* pRow, XTP_REPORTRECORDITEM_METRICS* pMetrics, BOOL bPrinting);
  359. //-----------------------------------------------------------------------
  360. // Summary:
  361. //     Fills indent area by its background.
  362. // Parameters:
  363. //     pDC   - Pointer to the used Device Context.
  364. //     rcRow - Row area rectangle coordinates.
  365. // Example:
  366. // <code>
  367. // CXTPReportPaintManager* pPaintManager = m_pControl->GetPaintManager();
  368. // CRect rcRow(rcClient);
  369. // // Get default row height
  370. // int nRowHeight = m_pControl->GetRowHeight(FALSE)
  371. // rcRow.bottom = rcRow.top + nRowHeight;
  372. // pPaintManager->FillIndent(pDC, rcRow);
  373. // </code>
  374. //-----------------------------------------------------------------------
  375. virtual void FillIndent(CDC* pDC, CRect rcRow);
  376. //-----------------------------------------------------------------------
  377. // Summary:
  378. //     Fills item shade by its background if necessary.
  379. // Parameters:
  380. //     pDC    - Pointer to the used Device Context.
  381. //     rcItem - Item area rectangle coordinates.
  382. // Example:
  383. // <code>
  384. // CXTPReportPaintManager* pPaintManager = m_pControl->GetPaintManager();
  385. // CRect rcItem(m_rcRow);
  386. // pPaintManager->FillItemShade(pDC, rcItem);
  387. // </code>
  388. //-----------------------------------------------------------------------
  389. virtual void FillItemShade(CDC* pDC, CRect rcItem);
  390. //-----------------------------------------------------------------------
  391. // Summary:
  392. //     Fills column header control area by its background.
  393. // Parameters:
  394. //     pDC      -  Pointer to the used Device Context.
  395. //     rcHeader -  Header area rectangle coordinates.
  396. // Example:
  397. // <code>
  398. // CXTPReportPaintManager* pPaintManager = m_pControl->GetPaintManager();
  399. // CRect rcHeader(rcClient);
  400. // int nHeaderHeight = m_pControl->GetHeaderHeight();
  401. // rcHeader.bottom = rcHeader.top + nHeaderHeight;
  402. // pPaintManager->FillHeaderControl(pDC, rcHeader);
  403. // </code>
  404. //-----------------------------------------------------------------------
  405. virtual void FillHeaderControl(CDC* pDC, CRect rcHeader);
  406. //-----------------------------------------------------------------------
  407. // Summary:
  408. //     Fills column footer control area by its background.
  409. // Parameters:
  410. //     pDC      -  Pointer to the used Device Context.
  411. //     rcFooter -  Footer area rectangle coordinates.
  412. //-----------------------------------------------------------------------
  413. virtual void FillFooter(CDC* pDC, CRect rcFooter);
  414. //-----------------------------------------------------------------------
  415. // Summary:
  416. //     Draws column header with all related attributes (sort order, icon, etc).
  417. // Parameters:
  418. //     pDC           - Pointer to the used Device Context.
  419. //     pColumn       - Column header area rectangle coordinates.
  420. //     pHeader       - Pointer to report header.
  421. //     rcColumn      - Column area rectangle coordinates.
  422. //     bDrawExternal - whether draw Column on Header area, default is FALSE.
  423. // Example:
  424. // <code>
  425. // CXTPReportPaintManager* pPaintManager = m_pControl->GetPaintManager();
  426. // CXTPReportColumn* pColumn = CXTPReportColumn* pColumn = m_pColumns->GetAt(1);
  427. // CRect rcHeader(rcClient);
  428. // int nHeaderHeight = m_pControl->GetHeaderHeight();
  429. // rcHeader.bottom = rcHeader.top + nHeaderHeight;
  430. // GetPaintManager()->DrawColumn(pDC, pColumn, this, rcHeader);
  431. // </code>
  432. //-----------------------------------------------------------------------
  433. virtual void DrawColumn(CDC* pDC, CXTPReportColumn* pColumn, CXTPReportHeader* pHeader,
  434. CRect rcColumn, BOOL bDrawExternal = FALSE);
  435. //-----------------------------------------------------------------------
  436. // Summary:
  437. //     Draws column footer with all related attributes (footer text).
  438. // Parameters:
  439. //     pDC           - Pointer to the used Device Context.
  440. //     pColumn       - Column header area rectangle coordinates.
  441. //     pHeader       - Pointer to report header.
  442. //     rcColumn      - Column area rectangle coordinates.
  443. //-----------------------------------------------------------------------
  444. virtual void DrawColumnFooter(CDC* pDC, CXTPReportColumn* pColumn, CXTPReportHeader* pHeader, CRect rcColumn);
  445. //-----------------------------------------------------------------------
  446. // Summary:
  447. //     Call this method to determine if hot tracking is enabled for current column style.
  448. // Returns:
  449. //     TRUE if enabled; FALSE otherwise
  450. // Remarks:
  451. //     Hot Tracking can be used only for xtpReportColumnOffice2003 and xtpReportColumnExplorer styles.
  452. // See Also:
  453. //     m_columnStyle, m_bHotTracking
  454. //-----------------------------------------------------------------------
  455. BOOL IsColumHotTrackingEnabled() const;
  456. //-----------------------------------------------------------------------
  457. // Summary:
  458. //     Draws rows that were focused.
  459. // Parameters:
  460. //     pDC     - Pointer to the used Device Context.
  461. //     pHeader - Pointer to report header.
  462. //     rcRow   - Area rectangle coordinates.
  463. // Example:
  464. // <code>
  465. // CRect rcClient(GetParent()->GetClientRect());
  466. // CXTPReportHeader* pHeader = m_pColumns->GetReportHeader();
  467. // CXTPReportPaintManager* pPaintManager = m_pControl->GetPaintManager();
  468. // GetPaintManager()->DrawResizingRect(pDC, pHeader, rcClient);
  469. // </code>
  470. //-----------------------------------------------------------------------
  471. virtual void DrawFocusedRow(CDC* pDC, CRect rcRow);
  472. //-----------------------------------------------------------------------
  473. // Summary:
  474. //     Draws Group By box.
  475. // Parameters:
  476. //     pDC       - Pointer to the used Device Context.
  477. //     rcGroupBy - Reference to Group By box area rectangle coordinates.
  478. // Example:
  479. // <code>
  480. // CXTPReportPaintManager* pPaintManager = m_pControl->GetPaintManager();
  481. // pPaintManager->FillGroupByControl(pDC, rcGroupBy);
  482. // </code>
  483. //-----------------------------------------------------------------------
  484. virtual void FillGroupByControl(CDC* pDC, CRect& rcGroupBy);
  485. //-----------------------------------------------------------------------
  486. // Summary:
  487. //     Returns point to additional image list with Glyphs
  488. // Remarks:
  489. //     Additional image list usually used for bitmaps of collapsed icons, etc
  490. //     You call this member function to get a pointer to list and manipulate
  491. //     its content as you wish
  492. // Returns:
  493. //     Pointer to the instantiated object of CImageList class
  494. //-----------------------------------------------------------------------
  495. CImageList* GetGlyphsImageList();
  496. //-----------------------------------------------------------------------
  497. // Summary:
  498. //     Draws Horizontal line.
  499. // Parameters:
  500. //     pDC - Pointer to the used Device Context.
  501. //     xPos   - Horizontal coordinate of the beginning of line.
  502. //     yPos   - Vertical coordinate of the beginning of line.
  503. //     cx  - Length of line.
  504. //     clr - Color of line.
  505. // Remarks:
  506. //     This member function is called in the control everywhere we need to
  507. //     draw a simple horizontal line
  508. //-----------------------------------------------------------------------
  509. void DrawHorizontalLine(CDC* pDC, int xPos, int yPos, int cx, COLORREF clr);
  510. //-----------------------------------------------------------------------
  511. // Summary:
  512. //     Draws vertical line.
  513. // Parameters:
  514. //     pDC - Pointer to the used Device Context.
  515. //     xPos   - Horizontal coordinate of the beginning of line.
  516. //     yPos   - Vertical coordinate of the beginning of line.
  517. //     cy  - Length of line.
  518. //     clr - Color of line.
  519. // Remarks:
  520. //     This member function is called in the control everywhere we need to
  521. //     draw a simple vertical line
  522. //-----------------------------------------------------------------------
  523. void DrawVerticalLine(CDC* pDC, int xPos, int yPos, int cy, COLORREF clr);
  524. //-----------------------------------------------------------------------
  525. // Summary:
  526. //     Draws triangle that shows the sort order of column.
  527. // Parameters:
  528. //     pDC        - Pointer to the used Device Context.
  529. //     rcTriangle - Triangle area rectangle coordinates.
  530. //     bToDown    - If TRUE the top of triangle turn downward, otherwise upward.
  531. // Remarks:
  532. //     You use this function to draw a triangle image on the header of the column
  533. //     that is sorted. Triangle represents the direction of sorting: ascending or descending.
  534. //     Sizes of the triangle depend on the rectangle area that is provided to draw
  535. // Example:
  536. // <code>
  537. // // draw ascendant triangle
  538. // CRect rcTriangle;
  539. // rcTriangle.CopyRect(rcHeader);
  540. // rcTriangle.DeflateRect(40, 5, 5, 5);
  541. // DrawTriangle(pDC, rcTriangle, TRUE);
  542. //
  543. // // draw descendant triangle
  544. // CRect rcTriangle;
  545. // rcTriangle.CopyRect(rcHeader);
  546. // rcTriangle.DeflateRect(40, 5, 5, 5);
  547. // DrawTriangle(pDC, rcTriangle, FALSE);
  548. // </code>
  549. //-----------------------------------------------------------------------
  550. void DrawTriangle(CDC* pDC, CRect rcTriangle, BOOL bToDown);
  551. //-----------------------------------------------------------------------
  552. // Summary:
  553. //     Draws a column connector for Group By box.
  554. // Parameters:
  555. //     pDC    - Pointer to the used Device Context.
  556. //     ptFrom - Source point of the connector.
  557. //     ptTo   - Target point of the connector.
  558. // Remarks:
  559. //     You use this function to draw a line that represents a
  560. //     chain of columns in GroupBy box. It connects columns
  561. //     in GroupBy box altogether
  562. // Example:
  563. //     <code>DrawConnector(pDC, CPoint(rcItem.right - 5, rcItem.bottom), CPoint(x, rcItem.bottom + 4));</code>
  564. //-----------------------------------------------------------------------
  565. void DrawConnector(CDC* pDC, CPoint ptFrom, CPoint ptTo);
  566. //-----------------------------------------------------------------------
  567. // Summary:
  568. //     Draws collapsed bitmap.
  569. // Parameters:
  570. //     pDC      - Pointer to the used Device Context.
  571. //     pRow     - Pointer to the Row.
  572. //     rcBitmap - Bitmap area rectangle coordinates.
  573. // Returns:
  574. //     Size of drawn bitmap.
  575. //-----------------------------------------------------------------------
  576. CSize DrawCollapsedBitmap(CDC* pDC, const CXTPReportRow* pRow, CRect& rcBitmap);
  577. //-----------------------------------------------------------------------
  578. // Summary:
  579. //     Draws image of Report Control.
  580. // Parameters:
  581. //     pDC      - Pointer to the used Device Context.
  582. //     pControl - Pointer to report control which image will be drawn.
  583. //     rcColumn - Bitmap area rectangle coordinates.
  584. //     iImage   - Image index.
  585. // Remarks
  586. //     You use this function to draw a bitmap in the column rectangle.
  587. //     If the provided rectangle is too small, the bitmap will not be drawn.
  588. //     Generally, the column rectangle must be big enough to contain
  589. //     text (if presented) and bitmap
  590. // Returns:
  591. //     Width of drawn bitmap.
  592. // Example:
  593. // <code>
  594. // // draws bitmap with id ID_READ
  595. // pPaintManager->DrawBitmap(pDC, pControl, rcColumn, ID_READ);
  596. // </code>
  597. //-----------------------------------------------------------------------
  598. virtual int DrawBitmap(CDC* pDC, CXTPReportControl* pControl, CRect rcColumn, int iImage);
  599. //-----------------------------------------------------------------------
  600. // Summary:
  601. //     Draws image for a column.
  602. // Parameters:
  603. //      pDC      - Pointer to the used Device Context.
  604. //      pColumn  - Pointer to a column object.
  605. //      rcColumn - Column rectangle.
  606. //      rcIcon   - Image bounding rectangle.
  607. //      iIcon    - Image index.
  608. // Returns:
  609. //      Width of drawn bitmap.
  610. //-----------------------------------------------------------------------
  611. virtual int DrawColumnIcon(CDC* pDC, CXTPReportColumn* pColumn, CRect rcColumn, CRect rcIcon, int iIcon);
  612. //-----------------------------------------------------------------------
  613. // Summary:
  614. //     This method is called to draw standard glyphs of report control
  615. // Parameters:
  616. //     pDC      - Pointer to the used Device Context.
  617. //     rcColumn - Bitmap area rectangle coordinates.
  618. //     iImage   - Image index.
  619. // Returns:
  620. //     Size of drawn bitmap.
  621. //-----------------------------------------------------------------------
  622. virtual CSize DrawGlyph(CDC* pDC, CRect rcColumn, int iImage);
  623. //-----------------------------------------------------------------------
  624. // Summary:
  625. //     Changes report control grid lines color.
  626. // Parameters:
  627. //     clrGridLine - New grid color.
  628. // Returns:
  629. //     Previous grid color
  630. // Example:
  631. // <code>
  632. // // Set new color, save old one
  633. // COLORREF clrNew;
  634. // clrNew = RGB(0, 255, 0);
  635. // COLORREF clrOld;
  636. // clrOld = SetGridColor(clrNew);
  637. // </code>
  638. //-----------------------------------------------------------------------
  639. COLORREF SetGridColor(COLORREF clrGridLine);
  640. //-----------------------------------------------------------------------
  641. // Summary:
  642. //     Changes the preview mode state for the control.
  643. // Parameters:
  644. //     bIsPreviewMode - New preview mode (TRUE or FALSE).
  645. // Remarks:
  646. //     Preview mode has two states: enable and disabled. When preview is
  647. //     enabled, the control tries to show additional bands with preview text
  648. // Example:
  649. // <code>
  650. // // enable preview mode
  651. // EnablePreviewMode(TRUE);
  652. //
  653. // // disable preview mode
  654. // EnablePreviewMode(FALSE);
  655. // </code>
  656. //-----------------------------------------------------------------------
  657. void EnablePreviewMode(BOOL bIsPreviewMode);
  658. //-----------------------------------------------------------------------
  659. // Summary:
  660. //     Returns preview mode state for the control.
  661. // Remarks:
  662. //     You use this member function to programmatically identify
  663. //     in which mode the control is
  664. // Returns:
  665. //     Current preview mode state.
  666. //-----------------------------------------------------------------------
  667. BOOL IsPreviewMode() const;
  668. //-----------------------------------------------------------------------
  669. // Summary:
  670. //     Returns the default text font for the control items.
  671. // Returns:
  672. //     Pointer to the current font used for drawing test.
  673. //-----------------------------------------------------------------------
  674. CFont* GetTextFont();
  675. //-----------------------------------------------------------------------
  676. // Summary:
  677. //     Set count of max lines of the preview text.
  678. // Parameters:
  679. //     nMaxLines - New value of max lines of text for a preview item.
  680. // Remarks:
  681. //     You use this member function to bound the height of a textPreview item
  682. //     by setting the maximum rows of text for it
  683. // Returns:
  684. //     Previous value of max lines of text for a preview item.
  685. // Example:
  686. //     <code>int nOldMaxLines = SetMaxPreviewLines(4);</code>
  687. //-----------------------------------------------------------------------
  688. int SetMaxPreviewLines(int nMaxLines);
  689. //-----------------------------------------------------------------------
  690. // Summary:
  691. //     Get the count of max lines of  preview text.
  692. // Returns:
  693. //     Current value of max lines of text for a preview item.
  694. //-----------------------------------------------------------------------
  695. int GetMaxPreviewLines();
  696. //-----------------------------------------------------------------------
  697. // Summary:
  698. //     Calculates the line count for preview text, takes into account max lines.
  699. // Parameters:
  700. //     pDC     - Pointer to the used Device Context.
  701. //     rcText  - Reference to text area rectangle coordinates.
  702. //     strText - String of text.
  703. // Remarks:
  704. //     This function calculates the count of preview text lines based on the length
  705. //     of preview text string, preview text font and width of provided rectangle.
  706. //     If default max lines count less than count of calculate lines,
  707. //     returns default max lines
  708. // Returns:
  709. //     Returns the count of lines needed to draw preview text.
  710. //-----------------------------------------------------------------------
  711. int GetPreviewLinesCount(CDC* pDC, CRect& rcText, const CString& strText);
  712. //-----------------------------------------------------------------------
  713. // Summary:
  714. //     Return visibility of grid line
  715. // Parameters:
  716. //     bVertical - determines which grid lines will be tested,
  717. //                 vertical or horizontal.
  718. // Returns:
  719. //     boolean value which identifies the visibility of the line
  720. //-----------------------------------------------------------------------
  721. BOOL IsGridVisible(BOOL bVertical) const;
  722. //-----------------------------------------------------------------------
  723. // Summary:
  724. //      Use this member function to set a header style.
  725. // Parameters:
  726. //      columnStyle - A value from XTPReportColumnStyle enum.
  727. // See Also: GetColumnStyle, XTPReportColumnStyle
  728. //-----------------------------------------------------------------------
  729. void SetColumnStyle(XTPReportColumnStyle columnStyle);
  730. //-----------------------------------------------------------------------
  731. // Summary:
  732. //      Use this member function to get a header style.
  733. // Returns:
  734. //      A value from XTPReportColumnStyle enum.
  735. // See Also: SetColumnStyle, XTPReportColumnStyle
  736. //-----------------------------------------------------------------------
  737. XTPReportColumnStyle GetColumnStyle() const;
  738. //-----------------------------------------------------------------------
  739. // Summary:
  740. //      Use this member function to get a header's custom theme base color
  741. //      for Office2007 column style.
  742. // Returns:
  743. //      A COLORREF value representing the custom theme base color for
  744. //      Office2007 column style. Value -1 means that standard theme is used.
  745. // See Also: SetColumnOffice2007CustomThemeBaseColor
  746. //-----------------------------------------------------------------------
  747. COLORREF GetColumnOffice2007CustomThemeBaseColor() const;
  748. //-----------------------------------------------------------------------
  749. // Summary:
  750. //      Use this member function to set a header's custom theme base color
  751. //      for Office2007 column style.
  752. // Parameters:
  753. //      clrTheme - A COLORREF value representing the custom theme base color.
  754. //                 Set this value as -1 to use standard theme.
  755. // See Also: GetColumnOffice2007CustomThemeBaseColor
  756. //-----------------------------------------------------------------------
  757. void SetColumnOffice2007CustomThemeBaseColor(COLORREF clrBaseColor);
  758. //-----------------------------------------------------------------------
  759. // Summary:
  760. //     Sets one of the predefined grid line styles
  761. // Parameters:
  762. //     bVertical - Determines which grid lines settings,
  763. //                 vertical or horizontal
  764. //     gridStyle - Grid style. Can be one of the values listed
  765. //                 in the remarks section.
  766. // Remarks:
  767. //     Grid style can be one of the following:
  768. //          * <b>xtpReportGridNoLines</b>   Empty line
  769. //          * <b>xtpReportGridSmallDots</b> Line drawn by small dots
  770. //          * <b>xtpReportGridLargeDots</b> Line drawn by large dots
  771. //          * <b>xtpReportGridDashes</b>    Line drawn by dashes
  772. //          * <b>xtpReportGridSolid</b>     Draws solid line
  773. // See Also: XTPReportGridStyle
  774. //-----------------------------------------------------------------------
  775. void SetGridStyle(BOOL bVertical, XTPReportGridStyle gridStyle);
  776. //--------------------------------------------------------------------------
  777. // Summary:
  778. //     Creates and sets default text font
  779. // Parameters:
  780. //     lf - Reference to LOGFONT structure
  781. // See Also: LOGFONT, SetCaptionFont
  782. //-----------------------------------------------------------------------
  783. void SetTextFont(LOGFONT& lf);
  784. //-----------------------------------------------------------------------
  785. // Summary:
  786. //     Creates and sets the default caption font
  787. // Parameters:
  788. //     lf - Reference to LOGFONT structure
  789. // See Also: LOGFONT, SetTextFont
  790. //-----------------------------------------------------------------------
  791. void SetCaptionFont(LOGFONT& lf);
  792. //-----------------------------------------------------------------------
  793. // Summary:
  794. //     Call this method to set the preview item indent.
  795. // Parameters:
  796. //     nLeft   - Left indent to be used
  797. //     nTop    - Top indent to be used
  798. //     nRight  - Right indent to be used
  799. //     nBottom - Bottom indent to be used
  800. //-----------------------------------------------------------------------
  801. void SetPreviewIndent(int nLeft, int nTop, int nRight, int nBottom);
  802. //-----------------------------------------------------------------------
  803. // Summary:
  804. //     This method is called to draw in-place button of the report
  805. // Parameters:
  806. //     pDC     - Pointer to the device context
  807. //     pButton - Pointer to in-place button to draw
  808. //-----------------------------------------------------------------------
  809. virtual void DrawInplaceButton(CDC* pDC, CXTPReportInplaceButton* pButton);
  810. //-----------------------------------------------------------------------
  811. // Summary:
  812. //     This method is called to draw tree elements of report control.
  813. // Parameters:
  814. //     pDrawArgs - pointer to structure with drawing arguments
  815. //     pMetrics  - Metrics of the item
  816. //     rcItem    - Item area rectangle coordinates.
  817. //     sizeGlyph - Item glyph rectangle coordinates.
  818. //-----------------------------------------------------------------------
  819. virtual void DrawTreeStructure(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, XTP_REPORTRECORDITEM_METRICS* pMetrics, CRect rcItem, CSize sizeGlyph);
  820. //-----------------------------------------------------------------------
  821. // Summary:
  822. //     Draw Item Bitmap. Override this method to draw custom bitmap.
  823. // Parameters:
  824. //     pDrawArgs - pointer to structure with drawing arguments
  825. //     rcItem    - Item rectangle.
  826. //     nImage    - Image index.
  827. //-----------------------------------------------------------------------
  828. virtual void DrawItemBitmap(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, CRect& rcItem, int nImage);
  829. //-----------------------------------------------------------------------
  830. // Summary:
  831. //     Draw Item Caption. Override this method to draw custom caption.
  832. // Parameters:
  833. //     pDrawArgs - pointer to structure with drawing arguments
  834. //     pMetrics  - Metrics of the item
  835. //-----------------------------------------------------------------------
  836. virtual void DrawItemCaption(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, XTP_REPORTRECORDITEM_METRICS* pMetrics);
  837. //-----------------------------------------------------------------------
  838. // Summary:
  839. //     Draw Item Control. Override this method to draw custom control.
  840. // Parameters:
  841. //     pDrawArgs - pointer to structure with drawing arguments
  842. //     pMetrics  - Metrics of the item
  843. //-----------------------------------------------------------------------
  844. virtual void DrawItemControl(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, CXTPReportRecordItemControl* pControl, CRect& rcItem);
  845. //-----------------------------------------------------------------------
  846. // Summary:
  847. //     This method is called to determines if paint manager supports
  848. //     variable height of row
  849. // Returns:
  850. //     TRUE if GetRowHeight retrieves same value for each row.
  851. // See Also: GetRowHeight
  852. //-----------------------------------------------------------------------
  853. BOOL IsFixedRowHeight() const;
  854. //-----------------------------------------------------------------------
  855. // Summary:
  856. //     This method is called to set if paint manager supports
  857. //     variable height of row
  858. // Parameters:
  859. //     bFixedRowHeight - TRUE to set Fixed Row height, FALSE to set variable
  860. // See Also: GetRowHeight
  861. //-----------------------------------------------------------------------
  862. void SetFixedRowHeight(BOOL bFixedRowHeight);
  863. //-----------------------------------------------------------------------
  864. // Summary:
  865. //     This method is called to determines if paint manager supports
  866. //     variable height of inplace buttons.
  867. // Returns:
  868. //     TRUE if height of inplace buttons is fixed, FALSE if it is the same
  869. //     as row height.
  870. // See Also: SetInplaceButtonHeight
  871. //-----------------------------------------------------------------------
  872. BOOL IsFixedInplaceButtonHeight() const;
  873. //-----------------------------------------------------------------------
  874. // Summary:
  875. //     This method is called to set if paint manager supports
  876. //     fixed height of inplace buttons.
  877. // Parameters:
  878. //     bFixedInplaceButtonHeight -  TRUE to set Fixed button height,
  879. //                                  FALSE to set variable (the same as row height).
  880. // See Also: IsFixedInplaceButtonHeight
  881. //-----------------------------------------------------------------------
  882. void SetInplaceButtonHeight(BOOL bFixedInplaceButtonHeight);
  883. //-----------------------------------------------------------------------
  884. // Summary:
  885. //      Get style of Freeze Columns Divider line.
  886. // Returns:
  887. //      A value from enum XTPReportFreezeColsDividerStyle.
  888. // See Also:
  889. //      XTPReportFreezeColsDividerStyle
  890. //-----------------------------------------------------------------------
  891. int GetFreezeColsDividerStyle() const;
  892. //-----------------------------------------------------------------------
  893. // Summary:
  894. //      Set style of Freeze Columns Divider line.
  895. // Parameters:
  896. //      nStyle - A value from enum XTPReportFreezeColsDividerStyle.
  897. // See Also:
  898. //      XTPReportFreezeColsDividerStyle
  899. //-----------------------------------------------------------------------
  900. void SetFreezeColsDividerStyle(int nStyle);
  901. //-----------------------------------------------------------------------
  902. // Summary:
  903. //     Override this method to do custom activities for the item before processing it.
  904. // Parameters:
  905. //     pDrawArgs - pointer to structure with drawing arguments
  906. // Returns:
  907. //     boolean value -  TRUE means that the item needs further processing
  908. //-----------------------------------------------------------------------
  909. virtual BOOL OnDrawAction(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs);
  910. //-----------------------------------------------------------------------
  911. // Summary:
  912. //     This method used to draw "No items" text message in Group By area
  913. //     when there are no items inside it. Override it for custom drawing.
  914. // Parameters:
  915. //     pDC     - Pointer to the used Device Context.
  916. //     rcItem  - Reference to text area rectangle coordinates.
  917. // See Also:
  918. //     CXTPReportPaintManager::m_strNoGroupBy
  919. //-----------------------------------------------------------------------
  920. virtual void DrawNoGroupByText(CDC* pDC, CRect rcItem);
  921. //-----------------------------------------------------------------------
  922. // Summary:
  923. //     This method is called to determine if grid fills empty space after the body rows.
  924. // Returns:
  925. //     TRUE if grid fills empty space after the body rows, FALSE - otherwise (default).
  926. // See Also: SetDrawGridForEmptySpace
  927. //-----------------------------------------------------------------------
  928. BOOL IsDrawGridForEmptySpace() const;
  929. //-----------------------------------------------------------------------
  930. // Summary:
  931. //     This method is called to determine if grid fills empty space after the body rows.
  932. // Returns:
  933. //     TRUE if grid fills empty space after the body rows, FALSE - otherwise (default).
  934. // See Also: IsDrawGridForEmptySpace
  935. //-----------------------------------------------------------------------
  936. void SetDrawGridForEmptySpace(BOOL bDrawGrid);
  937. protected:
  938. //-----------------------------------------------------------------------
  939. // Summary:
  940. //     Draw hyperlink string using hyperlinks text settings.
  941. // Parameters:
  942. //     pnCurrDrawPos - pointer to current drawing position (is updated after each call of function)
  943. //     pDrawArgs     - pointer to structure with drawing arguments
  944. //     pHyperlink    - pointer to hyperlink object
  945. //     strText       - string of text
  946. //     rcLink        - link hot spot area rectangle coordinates
  947. //     nFlag         - Flag can allow next values:
  948. //                     DT_END_ELLIPSIS - truncate text by ellipses
  949. //                     DT_WORDBREAK - - truncate text by word end
  950. //     bSelected     - if Row is selected
  951. //
  952. // Remarks:
  953. //     Its member function is internally used by DrawTextLine and draws hyperlink
  954. //     chunk of text string, updates hyperlink's hot spot.
  955. // Returns:
  956. //     Position in CString where drawing of one link text was stopped
  957. //-----------------------------------------------------------------------
  958. virtual int DrawLink(int* pnCurrDrawPos, XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, CXTPReportHyperlink* pHyperlink,
  959. CString strText, CRect rcLink, int nFlag);
  960. //-----------------------------------------------------------------------
  961. // Summary:
  962. //     Draw a line of text with respect to the drawing rect
  963. // Parameters:
  964. //     pDrawArgs        - Pointer to structure with drawing arguments.
  965. //     strText          - String of text.
  966. //     rcItem           - Item area rectangle coordinates.
  967. //     nFlag            - Flag can allow next values:
  968. //                        DT_END_ELLIPSIS - truncate text by ellipses
  969. //                        DT_WORDBREAK - - truncate text by word end
  970. //     nCharCounter     - Reference to printed char counted, accepts value before, returns value after drawing
  971. //     nHyperlikCounter - Reference to printed hyperlinks counted, accepts value before, returns value after drawing
  972. //     bSelected        - If Row is selected
  973. // Remarks:
  974. //     Its member function is internally used by DrawText() and draws one line of text.
  975. //     It processes plain text/ hyperlink text for one line. For multi-line text
  976. //     process last line - the truncate by ellipses, otherwise truncate by word
  977. // Returns:
  978. //     Position in CString where drawing of one line of text was stopped
  979. //-----------------------------------------------------------------------
  980. virtual void DrawTextLine(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, const CString& strText,
  981. CRect rcItem, int nFlag, int& nCharCounter, int& nHyperlikCounter);
  982. //-----------------------------------------------------------------------
  983. // Summary:
  984. //     Draw simple string into rectangle
  985. // Parameters:
  986. //     pnCurrDrawPos - Pointer to current drawing position (is updated after each call of function)
  987. //     pDC           - Point to used Device Context
  988. //     strDraw       - String of text
  989. //     rcDraw        - Text area rectangle coordinates
  990. //     nFormat       - Flag can allow next values:
  991. //                     DT_END_ELLIPSIS - truncate text by ellipses
  992. //                     DT_WORDBREAK - truncate text by word end
  993. // Remarks:
  994. //     Its member function is internally used by DrawTextLine and draws a plain chunk of
  995. //     text string.
  996. // Returns:
  997. //     Position in CString where drawing of one string of text line was stopped
  998. //-----------------------------------------------------------------------
  999. virtual int DrawString(int* pnCurrDrawPos, CDC* pDC, const CString& strDraw, CRect rcDraw, UINT nFormat);
  1000. //-----------------------------------------------------------------------
  1001. // Summary:
  1002. //     This method is called to draw background of the column using current column style
  1003. // Parameters:
  1004. //     pDC - Point to used Device Context
  1005. //     pColumn - Column needs to draw
  1006. //     rcColumn - Bounding rectangle of the column
  1007. //     bColumnPressed - TRUE if column is pressed by user.
  1008. //     pHeader - Pointer to a header the column belongs to.
  1009. //-----------------------------------------------------------------------
  1010. virtual void DrawColumnBackground(CDC* pDC, CXTPReportColumn* pColumn, CRect rcColumn, BOOL& bColumnPressed, CXTPReportHeader* pHeader = NULL);
  1011. protected:
  1012. //-----------------------------------------------------------------------
  1013. // Summary:
  1014. //     Generates a custom grid pattern
  1015. // Parameters:
  1016. //     pDC      -  Pointer to device context.
  1017. //     pBrush   -  Pointer to brush object.
  1018. //     rc       -  Rectangle area.
  1019. //     pPattern -  Points to a short-integer array that contains the
  1020. //                 initial bitmap bit values. If it is NULL, the new
  1021. //                 bitmap is left uninitialized.
  1022. //     clr      -  COLORREF object representing the pattern color.
  1023. //-----------------------------------------------------------------------
  1024. virtual void DrawGridPat(CDC* pDC, CBrush* pBrush, CRect rc, CONST VOID*pPattern, COLORREF clr);
  1025. //-----------------------------------------------------------------------
  1026. // Summary:
  1027. //     Draws in-place button frame
  1028. // Parameters:
  1029. //     pDC     - Pointer to device context.
  1030. //     pButton - Pointer to in-place button
  1031. //-----------------------------------------------------------------------
  1032. virtual void DrawInplaceButtonFrame(CDC* pDC, CXTPReportInplaceButton* pButton);
  1033. //-----------------------------------------------------------------------
  1034. // Summary:
  1035. //     Draws in-place button icon
  1036. // Parameters:
  1037. //     pDC     - Pointer to device context.
  1038. //     pButton - Pointer to in-place button
  1039. // Returns:
  1040. //     TRUE if icon has been drawn, FALSE otherwise.
  1041. //-----------------------------------------------------------------------
  1042. virtual BOOL DrawInplaceButtonIcon(CDC* pDC, CXTPReportInplaceButton* pButton);
  1043. //-----------------------------------------------------------------------
  1044. // Summary:
  1045. //     Calculate optimal height for specified column.
  1046. // Parameters:
  1047. //     pDC          - Pointer to device context.
  1048. //     pColumn      - Pointer to a column object.
  1049. //     nTotalWidth  - Total header with. Used for printing only.
  1050. // Returns:
  1051. //     Optimal height for specified column.
  1052. //-----------------------------------------------------------------------
  1053. virtual int CalcColumnHeight(CDC* pDC, CXTPReportColumn* pColumn, int nTotalWidth = 0);
  1054. //-----------------------------------------------------------------------
  1055. // Summary:
  1056. //     Draws multi-line text (keeping hyperlinks active).
  1057. // Parameters:
  1058. //     pDrawArgs     - Pointer to structure with drawing arguments.
  1059. //     strText       - String of text.
  1060. //     rcItem        - Item area rectangle coordinates.
  1061. //     bWordBreak    - Whether to break the line by words. If FALSE - only new line characters force new lines.
  1062. //-----------------------------------------------------------------------
  1063. virtual void DrawMultiLineText(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, const CString& strText,
  1064.    CRect rcItem, BOOL bWordBreak = TRUE);
  1065. //-----------------------------------------------------------------------
  1066. // Summary:
  1067. //     Draws single-line text (keeping hyperlinks active).
  1068. // Parameters:
  1069. //     pDrawArgs     - Pointer to structure with drawing arguments.
  1070. //     strText       - String of text.
  1071. //     rcItem        - Item area rectangle coordinates.
  1072. //     nStartPos     - Start position in strText.
  1073. //     nEndPos       - End position in strText.
  1074. //     nActualWidth  - Width of text to be drawn.
  1075. //-----------------------------------------------------------------------
  1076. virtual void DrawSingleLineText(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs,const CString& strText,
  1077. CRect rcItem, int nStartPos, int nEndPos,int nActualWidth);
  1078. //-----------------------------------------------------------------------
  1079. // Summary:
  1080. //     Calculates height of the rectangle, bounding the multiline text, when the width is fixed.
  1081. // Parameters:
  1082. //     pDC        - Pointer to device context.
  1083. //     strText    - String of text.
  1084. //     nMaxWidth  - Max width of the rectangle, bounding the text.
  1085. //     bWordBreak - Whether to break the line by words. If FALSE - only new line characters can increase the row height.
  1086. // Returns:
  1087. //     Necessary height to draw the multiline text.
  1088. //-----------------------------------------------------------------------
  1089. virtual int CalculateRowHeight(CDC* pDC, const CString& strText, int nMaxWidth, BOOL bWordBreak = TRUE);
  1090. //-----------------------------------------------------------------------
  1091. // Summary:
  1092. //     Draw hyperlink string using hyperlinks text settings (removing blanks).
  1093. // Parameters:
  1094. //     pnCurrDrawPos - pointer to current drawing position (is updated after each call of function)
  1095. //     pDrawArgs     - pointer to structure with drawing arguments
  1096. //     pHyperlink    - pointer to hyperlink object
  1097. //     strText       - string of text
  1098. //     rcLink        - link hot spot area rectangle coordinates
  1099. //     nFlag         - Flag can allow next values:
  1100. //                     DT_END_ELLIPSIS - truncate text by ellipses
  1101. //                     DT_WORDBREAK - - truncate text by word end
  1102. //     bTrim         - whether to trim the hyperlink
  1103. // Remarks:
  1104. //     Its member function is internally used by DrawTextLine and draws hyperlink
  1105. //     chunk of text string, updates hyperlink's hot spot.
  1106. //     If the hyperlink beginsends with blanks, they are removed.
  1107. // Returns:
  1108. //     Position in CString where drawing of one link text was stopped
  1109. //-----------------------------------------------------------------------
  1110. virtual int DrawLink2(int* pnCurrDrawPos, XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, CXTPReportHyperlink* pHyperlink,
  1111. CString strText, CRect rcLink, int nFlag, BOOL bTrim = FALSE);
  1112. public:
  1113. //-----------------------------------------------------------------------
  1114. // Summary:
  1115. //      Get style of header divider line.
  1116. // Returns:
  1117. //      A value from enum XTPReportFixedRowsDividerStyle.
  1118. // See Also:
  1119. //      XTPReportFixedRowsDividerStyle
  1120. //-----------------------------------------------------------------------
  1121. int GetHeaderRowsDividerStyle() const;
  1122. //-----------------------------------------------------------------------
  1123. // Summary:
  1124. //      Get style of footer divider line.
  1125. // Returns:
  1126. //      A value from enum XTPReportFixedRowsDividerStyle.
  1127. // See Also:
  1128. //      XTPReportFixedRowsDividerStyle
  1129. //-----------------------------------------------------------------------
  1130. int GetFooterRowsDividerStyle() const;
  1131. //-----------------------------------------------------------------------
  1132. // Summary:
  1133. //      Set style of header divider line.
  1134. // Parameters:
  1135. //      nStyle - A value from enum XTPReportFixedRowsDividerStyle.
  1136. // See Also:
  1137. //      XTPReportFixedRowsDividerStyle
  1138. //-----------------------------------------------------------------------
  1139. void SetHeaderRowsDividerStyle(int nStyle);
  1140. //-----------------------------------------------------------------------
  1141. // Summary:
  1142. //      Set style of footer divider line.
  1143. // Parameters:
  1144. //      nStyle - A value from enum XTPReportFixedRowsDividerStyle.
  1145. // See Also:
  1146. //      XTPReportFixedRowsDividerStyle
  1147. //-----------------------------------------------------------------------
  1148. void SetFooterRowsDividerStyle(int nStyle);
  1149. //-----------------------------------------------------------------------
  1150. // Summary:
  1151. //     Draws the Fixed Rows divider (for ex. dividing header record rows and body rows).
  1152. // Parameters:
  1153. //     pDC   - Pointer to the used Device Context.
  1154. //     rc - Rectangle coordinates.
  1155. //     pControl - Pointer to a report control.
  1156. //     bHeaderRows - whether the divider is under header rows or above footer rows.
  1157. //     bVScrollBarVisible - TRUE, if vertical scrollbar is visible, FALSE otherwise.
  1158. //-----------------------------------------------------------------------
  1159. void DrawFixedRowsDivider(CDC* pDC, const CRect& rc, CXTPReportControl* pControl, BOOL bHeaderRows, BOOL bVScrollBarVisible = TRUE);
  1160. //-----------------------------------------------------------------------
  1161. // Summary:
  1162. //      Get height of header divider line.
  1163. // Returns:
  1164. //      Header divider height.
  1165. // See Also:
  1166. //      XTPReportFixedRowsDividerStyle
  1167. //-----------------------------------------------------------------------
  1168. int GetHeaderRowsDividerHeight();
  1169. //-----------------------------------------------------------------------
  1170. // Summary:
  1171. //      Get height of footer divider line.
  1172. // Returns:
  1173. //      Footer divider height.
  1174. // See Also:
  1175. //      XTPReportFixedRowsDividerStyle
  1176. //-----------------------------------------------------------------------
  1177. int GetFooterRowsDividerHeight();
  1178. //private:
  1179. //{{AFX_CODEJOCK_PRIVATE
  1180. COLORREF MixColor(COLORREF clrLight, COLORREF clrDark, double dFactor);
  1181. void Line(CDC* pDC, int x, int y, int cx, int cy, CPen* pPen);
  1182. virtual void DrawTreeStructureLine(CDC* pDC, int x, int y, int cx, int cy, COLORREF clr);
  1183. virtual void ReplaceInHyperLinks(CXTPReportRecordItem* pItem, CString& rstrText, TCHAR chReplace);
  1184. //}}AFX_CODEJOCK_PRIVATE
  1185. public:
  1186. CFont m_fontText;           // Report items default text.
  1187. CFont m_fontBoldText;       // Report items default bold text.
  1188. CFont m_fontCaption;        // Column header caption font.
  1189. CFont m_fontPreview;        // Column header caption font.
  1190. public:
  1191. CXTPPaintManagerColor m_clrHighlight;       // Background color of the highlighted row.
  1192. CXTPPaintManagerColor m_clrGridLine;        // Grid lines color.
  1193. CXTPPaintManagerColor m_clrWindowText;      // Report items default text color.
  1194. CXTPPaintManagerColor m_clrHighlightText;   // Text color of the highlighted text.
  1195. CXTPPaintManagerColor m_clrHeaderControl;   // Background color of the report header.
  1196. CXTPPaintManagerColor m_clrCaptionText;     // Column header text color.
  1197. CXTPPaintManagerColor m_clrControlBack;     // Background color of the control report area.
  1198. CXTPPaintManagerColor m_clrGroupRowText;    // Row text color.
  1199. CXTPPaintManagerColor m_clrGroupShadeBack;  // Group row background color when indentation shade is enabled.
  1200. CXTPPaintManagerColor m_clrGroupShadeText;  // Group row foreground color when indentation shade is enabled.
  1201. CXTPPaintManagerColor m_clrGroupShadeBorder;// Color for group border's shade.
  1202. CXTPPaintManagerColor m_clrGroupBoxBack;    // Color of group box.
  1203. CXTPPaintManagerColor m_clrControlDark;     // Dark background color of the report control (used on Group By area).
  1204. CXTPPaintManagerColor m_clrControlLightLight;// Light background color used for drawing shades (used on column header area).
  1205. CXTPPaintManagerColor m_clrHotDivider;      // Color of the column hot divider window (2 arrows).
  1206. CXTPPaintManagerColor m_clrHyper;           // Hyperlink color.
  1207. CXTPPaintManagerColor m_clrIndentControl;   // Color of the tree indentation area.
  1208. CXTPPaintManagerColor m_clrItemShade;       // Color of the shade on sorted by column items.
  1209. CXTPPaintManagerColor m_clrBtnFace;         // Standard button face color.
  1210. CXTPPaintManagerColor m_clrBtnText;         // Standard button text color.
  1211. CXTPPaintManagerColor m_clrPreviewText;     // Preview text color.
  1212. CXTPPaintManagerColor m_clrSelectedRow;     // Selected row background color.
  1213. CXTPPaintManagerColor m_clrSelectedRowText; // Selected row text color.
  1214. CXTPPaintManagerColorGradient m_grcGradientColumn;          // Color of column used with xtpReportColumnOffice2003 style
  1215. CXTPPaintManagerColorGradient m_grcGradientColumnHot;       // HotTracking Color of column used with xtpReportColumnOffice2003 style
  1216. CXTPPaintManagerColorGradient m_grcGradientColumnPushed;    // Pushed Color of column used with xtpReportColumnOffice2003 style
  1217. CXTPPaintManagerColor m_clrGradientColumnShadow;            // Bottom shadow of column used with xtpReportColumnOffice2003 style
  1218. CXTPPaintManagerColor m_clrGradientColumnSeparator;         // Separator of column used with xtpReportColumnOffice2003 style
  1219. CXTPPaintManagerColor m_crlNoGroupByText;           // A color for "No items" text in GroupBy area (see m_strNoGroupBy member)
  1220. CXTPPaintManagerColor m_clrFreezeColsDivider;       // Freeze Columns Divider color.
  1221. CXTPPaintManagerColor m_clrHeaderRowsDivider;       // Color of header divider.
  1222. CXTPPaintManagerColor m_clrFooterRowsDivider;       // Color of footer divider.
  1223. COLORREF m_clrColumnOffice2007CustomTheme;          // Base color for Office2007 custom theme.
  1224. BOOL m_bGroupRowTextBold;       // TRUE to draw group rows with bold text.
  1225. BOOL m_bShadeGroupHeadings;     // Show or not show the indentation shade.
  1226. BOOL m_bShadeSortColumn;        // Show or not show the items shade in the sorted by column.
  1227. BOOL m_bHotTracking;            // TRUE to allow column hot tracking
  1228. BOOL m_bInvertColumnOnClick;    // TRUE to invert column on click
  1229. CString m_strNoItems;       // A string which contains customized "No Items" text for displaying in view when there are no visible rows.
  1230. CString m_strSortBy;        // A string which contains customized "Sort By" text for displaying in tooltip
  1231. CString m_strNoGroupBy;     // A string which contains customized "No items" text message for displaying in Group By area when there are no items inside it.
  1232. CString m_strNoFieldsAvailable; // A string which contains customized "No Fields Available" text message for displaying in Field Chooser.
  1233. BOOL m_bHideSelection;      // TRUE when hiding report control's selection by drawing selected items as others, FALSE otherwise.
  1234. BOOL m_bDrawSortTriangleAlways; // If TRUE, the sort triangle displayed in column headers when a column is sorted will always be displayed as long as the column size is large enough to drawn the triangle.  If FALSE, the triangle will be removed when the column size is too small to display the caption and triangle.
  1235. BOOL m_bUseColumnTextAlignment; // TRUE to draw caption text accordingly to its alignment
  1236. BOOL m_bRevertAlignment;       // TRUE to revert column alignments
  1237. BOOL m_bUseEditTextAlignment;  //  TRUE to automatically apply edit alignment using column alignment
  1238. int m_nTreeStructureStyle;     // Tree structure style.
  1239. XTPReportTreeStructureStyle m_treeStructureStyle;   // Tree structure style
  1240. XTPReportFixedRowsDividerStyle m_HeaderRowsDividerStyle; // Style of a divider line between the header and body rows.
  1241. XTPReportFixedRowsDividerStyle m_FooterRowsDividerStyle; // Style of a divider line between the footer and body rows.
  1242. CRect m_rcPreviewIndent;    // Preview indentation.
  1243. int m_nTreeIndent;          // Tree indentation.
  1244. BOOL m_bThemedInplaceButtons; // Draw in-place buttons using current theme settings.
  1245. protected:
  1246. int m_nRowHeight;           // Report row default height.
  1247. int m_nHeaderHeight;        // Column header height.
  1248. int m_nFooterHeight;        // Column footer height.
  1249. int m_nGroupGridLineHeight; // The height of the group grid line.
  1250. CImageList m_ilGlyphs;      // Contains an additional image list for report control
  1251. BOOL m_bIsPreviewMode;      // Show or not show the item preview.
  1252. int m_nResizingWidth;       // The width of the column resizing marker area.
  1253. int m_nMaxPreviewLines;     // Restrict maximum lines for preview text
  1254. CSize m_szGlyph;            // Glyph size
  1255. CBrush m_brushVeriticalGrid;    // Stores brush to draw vertical grid lines
  1256. CBrush m_brushHorizontalGrid;   // Stores brush to draw horizontal grid lines
  1257. CBrush m_brushTreeStructure;    // Stores brush to draw tree nodes
  1258. int m_nFreezeColsDividerStyle;  // A set of flags from XTPReportFreezeColsDividerStyle
  1259. BOOL m_bFixedRowHeight;     // TRUE if fixed rows used.
  1260. BOOL m_bDrawGridForEmptySpace;  // TRUE if grid fills the empty space (if any) after the body rows.
  1261. BOOL m_bFixedInplaceButtonHeight; // TRUE if fixed Inplace Buttons height used.
  1262. XTPReportGridStyle m_verticalGridStyle;     // Stores current style for vertical grid lines
  1263. XTPReportGridStyle m_horizontalGridStyle;   // Stores current style for horizontal grid lines
  1264. XTPReportColumnStyle m_columnStyle; // Contains column drawing style.
  1265. CXTPWinThemeWrapper m_themeWrapper;  // Header theme wrapper.
  1266. CXTPWinThemeWrapper m_themeButton;   // In-place button theme wrapper.
  1267. CXTPWinThemeWrapper m_themeCombo;    // Combobox in-place button theme wrapper.
  1268. CXTPWinThemeWrapper m_themeSpin;     // Spin in-place button theme wrapper.
  1269. CXTPFormulaMulDivC* m_pHeaderHeightFormula; // MulDivC formula for header height calculation
  1270. };
  1271. AFX_INLINE int CXTPReportPaintManager::GetHeaderHeight() {
  1272. return m_nHeaderHeight;
  1273. }
  1274. AFX_INLINE BOOL CXTPReportPaintManager::IsGridVisible(BOOL bVertical) const {
  1275. return bVertical ? (m_verticalGridStyle != xtpReportGridNoLines) : (m_horizontalGridStyle != xtpReportGridNoLines);
  1276. }
  1277. AFX_INLINE void CXTPReportPaintManager::EnablePreviewMode(BOOL bIsPreviewMode) {
  1278. m_bIsPreviewMode = bIsPreviewMode;
  1279. }
  1280. AFX_INLINE BOOL CXTPReportPaintManager::IsPreviewMode() const {
  1281. return m_bIsPreviewMode;
  1282. }
  1283. AFX_INLINE COLORREF CXTPReportPaintManager::SetGridColor(COLORREF clrGridLine){
  1284. COLORREF clrOldColor = m_clrGridLine;
  1285. m_clrGridLine.SetCustomValue(clrGridLine);
  1286. return clrOldColor;
  1287. }
  1288. AFX_INLINE CFont* CXTPReportPaintManager::GetTextFont() {
  1289. return &m_fontText;
  1290. }
  1291. AFX_INLINE int CXTPReportPaintManager::SetMaxPreviewLines(int nMaxLines) {
  1292. int nOldMaxLines = m_nMaxPreviewLines;
  1293. m_nMaxPreviewLines = nMaxLines;
  1294. return nOldMaxLines;
  1295. }
  1296. AFX_INLINE int CXTPReportPaintManager::GetMaxPreviewLines() {
  1297. return m_nMaxPreviewLines;
  1298. }
  1299. AFX_INLINE int CXTPReportPaintManager::GetPreviewItemHeight(CDC* /*pDC*/, CXTPReportRow* /*pRow*/, int /*nWidth*/, int nHeight) {
  1300. return nHeight;
  1301. }
  1302. AFX_INLINE CImageList* CXTPReportPaintManager::GetGlyphsImageList() {
  1303. return &m_ilGlyphs;
  1304. }
  1305. AFX_INLINE BOOL CXTPReportPaintManager::IsFixedRowHeight() const {
  1306. return m_bFixedRowHeight;
  1307. }
  1308. AFX_INLINE void CXTPReportPaintManager::SetFixedRowHeight(BOOL bFixedRowHeight){
  1309. m_bFixedRowHeight = bFixedRowHeight;
  1310. }
  1311. AFX_INLINE BOOL CXTPReportPaintManager::IsFixedInplaceButtonHeight() const {
  1312. return m_bFixedInplaceButtonHeight;
  1313. }
  1314. AFX_INLINE void CXTPReportPaintManager::SetInplaceButtonHeight(BOOL bFixedInplaceButtonHeight){
  1315. m_bFixedInplaceButtonHeight= bFixedInplaceButtonHeight;
  1316. }
  1317. AFX_INLINE int  CXTPReportPaintManager::GetFreezeColsDividerStyle() const {
  1318. return m_nFreezeColsDividerStyle;
  1319. }
  1320. AFX_INLINE void CXTPReportPaintManager::SetFreezeColsDividerStyle(int nStyle) {
  1321. m_nFreezeColsDividerStyle = nStyle;
  1322. }
  1323. AFX_INLINE int  CXTPReportPaintManager::GetHeaderRowsDividerStyle() const {
  1324. return m_HeaderRowsDividerStyle;
  1325. }
  1326. AFX_INLINE void CXTPReportPaintManager::SetHeaderRowsDividerStyle(int nStyle) {
  1327. m_HeaderRowsDividerStyle = (XTPReportFixedRowsDividerStyle) nStyle;
  1328. }
  1329. AFX_INLINE int  CXTPReportPaintManager::GetFooterRowsDividerStyle() const {
  1330. return m_FooterRowsDividerStyle;
  1331. }
  1332. AFX_INLINE void CXTPReportPaintManager::SetFooterRowsDividerStyle(int nStyle) {
  1333. m_FooterRowsDividerStyle = (XTPReportFixedRowsDividerStyle) nStyle;
  1334. }
  1335. AFX_INLINE COLORREF CXTPReportPaintManager::MixColor(COLORREF clrLight, COLORREF clrDark, double dFactor) {
  1336. return RGB(GetRValue(clrLight) - dFactor * (GetRValue(clrLight) - GetRValue(clrDark)),
  1337. GetGValue(clrLight) - dFactor * (GetGValue(clrLight) - GetGValue(clrDark)),
  1338. GetBValue(clrLight) - dFactor * (GetBValue(clrLight) - GetBValue(clrDark)));
  1339. }
  1340. AFX_INLINE void CXTPReportPaintManager::Line(CDC* pDC, int x, int y, int cx, int cy, CPen* pPen) {
  1341. CPen* pOldPen = pDC->SelectObject(pPen);
  1342. pDC->MoveTo(x, y);
  1343. pDC->LineTo(x + cx, y + cy);
  1344. pDC->SelectObject(pOldPen);
  1345. }
  1346. AFX_INLINE BOOL CXTPReportPaintManager::OnDrawAction(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs){
  1347. UNREFERENCED_PARAMETER(pDrawArgs);
  1348. return TRUE;
  1349. }
  1350. AFX_INLINE void CXTPReportPaintManager::SetColumnStyle(XTPReportColumnStyle columnStyle) {
  1351. m_columnStyle = columnStyle;
  1352. RefreshMetrics();
  1353. }
  1354. AFX_INLINE XTPReportColumnStyle CXTPReportPaintManager::GetColumnStyle() const {
  1355. return m_columnStyle;
  1356. }
  1357. AFX_INLINE BOOL CXTPReportPaintManager::IsDrawGridForEmptySpace() const {
  1358. return m_bDrawGridForEmptySpace;
  1359. }
  1360. AFX_INLINE void CXTPReportPaintManager::SetDrawGridForEmptySpace(BOOL bDrawGrid){
  1361. m_bDrawGridForEmptySpace= bDrawGrid;
  1362. }
  1363. AFX_INLINE void CXTPReportPaintManager::SetColumnOffice2007CustomThemeBaseColor(COLORREF clrBaseColor) {
  1364. m_clrColumnOffice2007CustomTheme = clrBaseColor;
  1365. RefreshMetrics();
  1366. }
  1367. AFX_INLINE COLORREF CXTPReportPaintManager::GetColumnOffice2007CustomThemeBaseColor() const {
  1368. return m_clrColumnOffice2007CustomTheme;
  1369. }
  1370. #endif //#if !defined(__XTPREPORTPAINTMANAGER_H__)