www.pudn.com > HReportTest.rar > HReportListPrint.h


// HReportListPrint.h: interface for the CHReportListPrint class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_HREPORTLISTPRINT_H__3361B56E_8A73_4A84_B1BC_FFDE107D0E13__INCLUDED_) 
#define AFX_HREPORTLISTPRINT_H__3361B56E_8A73_4A84_B1BC_FFDE107D0E13__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
class CHReportListPrint   
{ 
public: 
	CHReportListPrint() { Init(); } 
	CHReportListPrint(CListCtrl* pList) { Init(); Attach(pList); } 
	virtual ~CHReportListPrint() { } 
 
public: 
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); 
	virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo); 
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); 
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); 
 
public: 
	void Attach(CListCtrl* pList) 
	{ 
		ASSERT(pList != NULL); 
		ASSERT_VALID(pList); 
		m_pList = pList; 
	} 
 
	// 设置边距 
	void SetMargin(int nLeftMargin = 4, int nHeadMargin = 8, int nLineSpace = 4) 
	{ 
		ASSERT(nLeftMargin > 0); 
		ASSERT(nHeadMargin > 0); 
		ASSERT(nLineSpace > 0); 
		m_nLeftMargin = nLeftMargin; 
		m_nHeadMargin = nHeadMargin; 
		m_nLineSpace  = nLineSpace; 
	} 
 
	// 设置页头字体 
	void SetHeadFont(const CString& strFaceName = _T("黑体"), int nFontSize = 16, BOOL bBold = TRUE) 
	{ 
		ASSERT(!strFaceName.IsEmpty()); 
		ASSERT(nFontSize > 0); 
		m_strHeadName = strFaceName; 
		m_nHeadSize = nFontSize; 
		m_bHeadBold = bBold; 
	} 
 
	// 设置正文字体 
	void SetPrintFont(const CString& strFaceName = _T("Tahoma"), int nFontSize = 10, BOOL bBold = FALSE) 
	{ 
		ASSERT(!strFaceName.IsEmpty()); 
		ASSERT(nFontSize > 0); 
		m_strPrintName = strFaceName; 
		m_nPrintSize = nFontSize; 
		m_bPrintBold = bBold; 
	} 
 
	// 设置页脚字体 
	void SetFootFont(const CString& strFaceName = _T("Tahoma"), int nFontSize = 10, BOOL bBold = FALSE) 
	{ 
		ASSERT(!strFaceName.IsEmpty()); 
		ASSERT(nFontSize > 0); 
		m_strFootName = strFaceName; 
		m_nFootSize = nFontSize; 
		m_bFootBold = bBold; 
	} 
 
	// 设置页头文字, 页脚文字和页码信息格式 
	void SetPageText(const CString& strHead,  
					 const CString& strFoot   = _T(""),  
					 const CString& strFormat = _T(" %d / %d ")) 
	{ 
		m_strPageHead = strHead; 
		m_strPageFoot = strFoot; 
		m_strPageFormat = strFormat; 
	} 
 
protected: 
	virtual CSize PrintListFoot(CDC * pDC, CRect & rcPage, BOOL bCalc); 
	virtual CSize PrintListHead(CDC * pDC, CRect & rcPage, BOOL bCalc); 
	virtual CSize PrintPageFoot(CDC * pDC, CRect & rcPage, const int nPage, const int nMaxPage, BOOL bCalc); 
	virtual CSize PrintPageHead(CDC * pDC, CRect & rcPage, BOOL bCalc); 
 
	void SubtractMargin(CDC * pDC, CRect &rc); 
	void CreateFontX(CFont& font, CDC* pDC, const CString &strFont,  
					 int nSize, BOOL bBold = FALSE); 
 
	void Init() 
	{ 
		m_pList = NULL; 
 
		m_nItemsOfPage = 0; 
		m_nFootHeight = 0; 
 
		m_nLeftMargin = 4; 
		m_nHeadMargin = 8; 
		m_nLineSpace  = 16; 
 
		m_strPageHead = _T(""); 
		m_strPageFoot = _T(""); 
		m_strPageFormat = _T(" %d / %d "); 
 
		m_nHeadSize = 16; 
		m_strHeadName = _T("黑体"); 
		m_bHeadBold = TRUE; 
		 
		m_nPrintSize = 10; 
		m_strPrintName = _T("Tahoma"); 
		m_bPrintBold = FALSE; 
		 
		m_nFootSize = 10; 
		m_bFootBold = FALSE; 
		m_strFootName = _T("Tahoma"); 
	} 
 
protected: 
	CListCtrl* m_pList; 
 
	int* m_pDx;			// 列坐标 
	int* m_pFormat;		// 列对齐方式 
	char** m_pColTitle;	// 列标题 
 
	int m_nItemsOfPage;		// 每页打印的行数 
 
	int m_nLeftMargin, m_nHeadMargin, m_nLineSpace; 
	int m_nFootHeight; 
 
	CString	m_strPageHead,	// 页头文字 
			m_strPageFoot,	// 页脚文字 
			m_strPageFormat; // 页码信息格式 
 
	CFont m_fontPrint, m_fontHead, m_fontFoot;	// 字体 
	CSize m_sizePrint, m_sizeHead, m_sizeFoot;	// 字体创建后的大小 
 
	int  m_nPrintSize, m_nHeadSize, m_nFootSize;	// 创建字体的大小 
	BOOL m_bPrintBold, m_bHeadBold, m_bFootBold; 
	CString m_strPrintName, m_strHeadName, m_strFootName;	// 字体名称 
}; 
 
#endif // !defined(AFX_HREPORTLISTPRINT_H__3361B56E_8A73_4A84_B1BC_FFDE107D0E13__INCLUDED_)