⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 easyreport.h

📁 这是一个不用任何控件的的纯VC报表源码。而且写得相当好!
💻 H
字号:

/*******************************************************************************
 * EasyReport.h: interface for the CElement class.
 *
 * MFC Easy! Report class
 *
 * Written by Vipul Lal <vipul@hotmail.com>
 * Copyright (c) 2000-2002. All Rights Reserved.
 *
 * This code may be used in compiled form in any way you desire. This
 * file may be redistributed unmodified by any means PROVIDING it is 
 * not sold for profit without the authors written consent, and 
 * providing that this notice and the authors name and all copyright 
 * notices remains intact. 
 *
 * An email letting me know how you are using it would be nice too. 
 *
 * This file is provided "as is" with no expressed or implied warranty.
 * The author accepts no liability for any damage/loss of business that
 * this product may cause.
 *
 *
 *******************************************************************************/


#if !defined(_EasyReport_H_65D16A04_6617_45DA_AE5C_B625482F7098)
#define _EasyReport_H_65D16A04_6617_45DA_AE5C_B625482F7098


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000



class CEasyReport : public CObject  
{

public:

	// Struct CColInfo defines columns in a tabular section.
	struct CColInfo
	{
		enum eAlignType { eLeft, eCenter, eRight, eDecimal };

		const char *m_Heading;
		int			m_CharCount;
		eAlignType	m_align;
	};


protected:
	DECLARE_SERIAL( CEasyReport)
	void	Serialize(CArchive &);

// Data members
	// Page Stats...
	int				m_PageHeight;	// height of the entire page
	int				m_PageWidth;
	int				m_TopMargin;	// page top margin
	int				m_BottomMargin;
	int				m_LeftMargin;
	int				m_RightMargin;

	// Standard fonts and styles...
	enum eFontIndex { eCaptionFont, eColHeadingFont, eDataFont, eTextFont };
	enum { eMaxStyles = eTextFont + 1 };

	CFont		*m_Fonts[ eMaxStyles ];
	CSize		m_TextSizes[ eMaxStyles ];
	CPen		m_StdPen;

	// printer device context. Valid only while printing
	HDC				m_PrinterDC;

	// Page
	int				m_MaxCol;
	int				m_PageCount;
	int				m_CurPage;		// current page on display
	int				m_DataTop;		// top of the data area on this page.

	// Report generation
	CPtrArray		m_ReportItems;
	CWordArray		m_PageItems;	// for preview

	// Table support
	CWordArray		m_TabStops;			// array of tab stops for the columns
	CColInfo		*m_DataCols;		// Array of column info items in the table
	int				m_NumDataCols;		// # of columns in the table

	bool			m_RepeatTblHdr;		// repeat this header on every page
	bool			m_RedrawTblHdr;		// set after EjectPage and reset with AtCol
	bool			m_SuppressBlankTbl;	// Suppress table header if table is blank

	int				m_TableHeadingHt;	// for multi-row headings
	TCHAR			m_BreakChar;		// for word wrapping.

	// headers and footers
	int				m_ReportHdrHt;	// height of the report header
	int				m_ReportFtrHt;	// height of the report footer
	int				m_PageHdrHt;	// height of the page header
	int				m_PageFtrHt;	// height of the page footer
	
	// Standard items used in a report
	CString			m_CompanyName;		// name of this company
	CString			m_ReportTitle;		// report title
	CString			m_ReportDate;		// report date

	// protected members
	void	SetupRectForCol(int inTabStop, CRect &outRect);
	void	WriteParagraph(const char *inText);


public:
	CEasyReport();
	virtual ~CEasyReport();
	virtual void	DoCleanup();

	// Functionality
	void	Start(void);
	void	End();
	void	DrawCurrentPage(CDC *inDC);

	// setters...
	void	SetCompanyName(const char *inStr)		{ m_CompanyName = inStr;}
	void	SetReportTitle(const char *inStr)		{ m_ReportTitle = inStr;}

	void	AtTab(int,const char *);	// print something at tab(n)
	void	AtTab(int,double,bool inInsertCommas = true);
	void	NextRow();					// position to next row
	void	SetDataCols(CColInfo *inCols = NULL, int nCols=0);
	void	WriteTableHeader();

	bool	EjectPage(bool inIsLastPage = false);

	// override to customize
	virtual	void	WriteReportHeader(CRect inRect);
	virtual	void	WriteReportFooter(CRect inRect);
	virtual	void	WritePageHeader(CRect inRect);
	virtual	void	WritePageFooter(CRect inRect);
	virtual	void	SetupTextStyles(HDC inDC);

	// rendered report
	int		GetPageCount()			{return m_PageCount;}
	int		GetCurPage()			{ return m_CurPage;}

	void	GotoPage(int inPage)	
	{ 
		if(inPage < m_PageCount)
			m_CurPage = inPage;
	}


	// page stats
	int		GetPageWidth(void)		{return m_PageWidth;}
	int		GetPageHeight(void)		{return m_PageHeight;}
	int		GetLeftMargin(void)		{return m_LeftMargin;}
	int		GetTopMargin(void)		{return m_TopMargin;}
	int		GetRightMargin(void)	{return m_RightMargin;}
	int		GetBottomMargin(void)	{return m_BottomMargin;}
	int		GetRightEdge(void)		{return m_PageWidth - m_RightMargin;}
	int		GetBottomEdge(void)		{return m_PageHeight - m_BottomMargin;}

	const CPen  *GetPen(int)
	{
		return &m_StdPen;	// only one pen style supported for now
	}

	const CFont	*GetStyle(int inStyleIndex);


	const CSize &  GetCaptionFontSize()
	{
		return m_TextSizes[ eCaptionFont ];
	}

	const CSize &  GetHeadingFontSize()
	{
		return m_TextSizes[ eColHeadingFont ];
	}


	const CSize &  GetDataFontSize()
	{
		return m_TextSizes[ eDataFont ];
	}

};



#endif // !defined(_EasyReport_H_65D16A04_6617_45DA_AE5C_B625482F7098)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -