EasyReport.h
上传用户:jimmy1212
上传日期:2020-11-02
资源大小:40k
文件大小:5k
源码类别:

Static控件

开发平台:

Visual C++

  1. /*******************************************************************************
  2.  * EasyReport.h: interface for the CElement class.
  3.  *
  4.  * MFC Easy! Report class
  5.  *
  6.  * Written by Vipul Lal <vipul@hotmail.com>
  7.  * Copyright (c) 2000-2002. All Rights Reserved.
  8.  *
  9.  * This code may be used in compiled form in any way you desire. This
  10.  * file may be redistributed unmodified by any means PROVIDING it is 
  11.  * not sold for profit without the authors written consent, and 
  12.  * providing that this notice and the authors name and all copyright 
  13.  * notices remains intact. 
  14.  *
  15.  * An email letting me know how you are using it would be nice too. 
  16.  *
  17.  * This file is provided "as is" with no expressed or implied warranty.
  18.  * The author accepts no liability for any damage/loss of business that
  19.  * this product may cause.
  20.  *
  21.  *
  22.  *******************************************************************************/
  23. #if !defined(_EasyReport_H_65D16A04_6617_45DA_AE5C_B625482F7098)
  24. #define _EasyReport_H_65D16A04_6617_45DA_AE5C_B625482F7098
  25. #if _MSC_VER > 1000
  26. #pragma once
  27. #endif // _MSC_VER > 1000
  28. class CEasyReport : public CObject  
  29. {
  30. public:
  31. // Struct CColInfo defines columns in a tabular section.
  32. struct CColInfo
  33. {
  34. enum eAlignType { eLeft, eCenter, eRight, eDecimal };
  35. const char *m_Heading;
  36. int m_CharCount;
  37. eAlignType m_align;
  38. };
  39. protected:
  40. DECLARE_SERIAL( CEasyReport)
  41. void Serialize(CArchive &);
  42. // Data members
  43. // Page Stats...
  44. int m_PageHeight; // height of the entire page
  45. int m_PageWidth;
  46. int m_TopMargin; // page top margin
  47. int m_BottomMargin;
  48. int m_LeftMargin;
  49. int m_RightMargin;
  50. // Standard fonts and styles...
  51. enum eFontIndex { eCaptionFont, eColHeadingFont, eDataFont, eTextFont };
  52. enum { eMaxStyles = eTextFont + 1 };
  53. CFont *m_Fonts[ eMaxStyles ];
  54. CSize m_TextSizes[ eMaxStyles ];
  55. CPen m_StdPen;
  56. // printer device context. Valid only while printing
  57. HDC m_PrinterDC;
  58. // Page
  59. int m_MaxCol;
  60. int m_PageCount;
  61. int m_CurPage; // current page on display
  62. int m_DataTop; // top of the data area on this page.
  63. // Report generation
  64. CPtrArray m_ReportItems;
  65. CWordArray m_PageItems; // for preview
  66. // Table support
  67. CWordArray m_TabStops; // array of tab stops for the columns
  68. CColInfo *m_DataCols; // Array of column info items in the table
  69. int m_NumDataCols; // # of columns in the table
  70. bool m_RepeatTblHdr; // repeat this header on every page
  71. bool m_RedrawTblHdr; // set after EjectPage and reset with AtCol
  72. bool m_SuppressBlankTbl; // Suppress table header if table is blank
  73. int m_TableHeadingHt; // for multi-row headings
  74. TCHAR m_BreakChar; // for word wrapping.
  75. // headers and footers
  76. int m_ReportHdrHt; // height of the report header
  77. int m_ReportFtrHt; // height of the report footer
  78. int m_PageHdrHt; // height of the page header
  79. int m_PageFtrHt; // height of the page footer
  80. // Standard items used in a report
  81. CString m_CompanyName; // name of this company
  82. CString m_ReportTitle; // report title
  83. CString m_ReportDate; // report date
  84. // protected members
  85. void SetupRectForCol(int inTabStop, CRect &outRect);
  86. void WriteParagraph(const char *inText);
  87. public:
  88. CEasyReport();
  89. virtual ~CEasyReport();
  90. virtual void DoCleanup();
  91. // Functionality
  92. void Start(void);
  93. void End();
  94. void DrawCurrentPage(CDC *inDC);
  95. // setters...
  96. void SetCompanyName(const char *inStr) { m_CompanyName = inStr;}
  97. void SetReportTitle(const char *inStr) { m_ReportTitle = inStr;}
  98. void AtTab(int,const char *); // print something at tab(n)
  99. void AtTab(int,double,bool inInsertCommas = true);
  100. void NextRow(); // position to next row
  101. void SetDataCols(CColInfo *inCols = NULL, int nCols=0);
  102. void WriteTableHeader();
  103. bool EjectPage(bool inIsLastPage = false);
  104. // override to customize
  105. virtual void WriteReportHeader(CRect inRect);
  106. virtual void WriteReportFooter(CRect inRect);
  107. virtual void WritePageHeader(CRect inRect);
  108. virtual void WritePageFooter(CRect inRect);
  109. virtual void SetupTextStyles(HDC inDC);
  110. // rendered report
  111. int GetPageCount() {return m_PageCount;}
  112. int GetCurPage() { return m_CurPage;}
  113. void GotoPage(int inPage)
  114. if(inPage < m_PageCount)
  115. m_CurPage = inPage;
  116. }
  117. // page stats
  118. int GetPageWidth(void) {return m_PageWidth;}
  119. int GetPageHeight(void) {return m_PageHeight;}
  120. int GetLeftMargin(void) {return m_LeftMargin;}
  121. int GetTopMargin(void) {return m_TopMargin;}
  122. int GetRightMargin(void) {return m_RightMargin;}
  123. int GetBottomMargin(void) {return m_BottomMargin;}
  124. int GetRightEdge(void) {return m_PageWidth - m_RightMargin;}
  125. int GetBottomEdge(void) {return m_PageHeight - m_BottomMargin;}
  126. const CPen  *GetPen(int)
  127. {
  128. return &m_StdPen; // only one pen style supported for now
  129. }
  130. const CFont *GetStyle(int inStyleIndex);
  131. const CSize &  GetCaptionFontSize()
  132. {
  133. return m_TextSizes[ eCaptionFont ];
  134. }
  135. const CSize &  GetHeadingFontSize()
  136. {
  137. return m_TextSizes[ eColHeadingFont ];
  138. }
  139. const CSize &  GetDataFontSize()
  140. {
  141. return m_TextSizes[ eDataFont ];
  142. }
  143. };
  144. #endif // !defined(_EasyReport_H_65D16A04_6617_45DA_AE5C_B625482F7098)