当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 一个打印报表的简单的类

VC++
C++类对象的拷贝构造函数
使用MFC的数组类
指针专题
精通VC与MATLAB联合编程:综合举例二
C 程序的外部变量与函数
MFC 编写的仿 Windows 计算器
static_cast揭密
事件编程(二)
事件编程(一)
精通 VC 与 MATLAB 联合编程:综合举例一
.c文件和.h文件的概念与联系
过马路,左右看
google 竞赛题 SecretSum 的 C++ 解法
如何实现快捷方式中的查找目标功能
几个 Windows 到 Linux 的代码移植问题
打造自定义的 AfxMessageBox
精通VC与MATLAB联合编程:编译器的使用
禁用屏幕拷贝(Print Screen),调用派生的析构函数及其它......
基于表达式计算的科学计算器
轻松实现DES算法查看器

VC++ 中的 一个打印报表的简单的类


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 67 ::
收藏到网摘: n/a

一个打印报表的简单的类


作者:李静南


下载源代码

一、前两天为公司改程序,其中有一部分是要打印出报表。原来的程序是调用VB写的一个程序。那个程序用VBA方式实现的,在一个空的WORD表格模板里填入数据,让WORD去打印,效果还可以,就是速度很慢。但是这次,上次写代码的人已经不在这里了,我并不想去学VBA,无奈之下找到了一个Rob.A Fraydl写的打印类示例,但是里面没有我要的功能,只是示范了怎么去打印。于是自己重新的封装了一下,基本算是合格了。
    程序实现了在指定位置画横线和竖线的功能,可以在画线之前选画笔,以及在指定的区域写文字的功能,并可以设定选择字体。

二、关于类,简单说明如下:

class CPrintRX {public:	void MoveTo(int xCur, int yCur);	int GetStrSize(char *str, CSize& size);	int GetWidth();	void NewPage(); //开始新的一页	void EndPage(); //结束一页	int StartPage(); //开始一页	void SetDistance (int punkte);	int SetMargins(int Top, int Bottom, int Left, int Right);	int EndPrint(); //结束作业	int StartPrint(); //开始打印作业	int InitToPrint(char *PrinterName, int Copies); //初始化	int SetFontFace(int iFont, int iFace);	int AddFont(LOGFONT *lf); //添加字体	int AddFont(CFont &newfont);	int DrawVLine(int x_up, int y_up, int x_bottom, int y_bottom, CPen &newpen);	int DrawVLine(int x_up, int y_up, int x_bottom, int y_bottom);	int DrawHLine(int x_left, int y_left, int x_right, int y_right, CPen & newpen);	int DrawHLine(int x_left, int y_left, int x_right, int y_right);	int DrawText(char *str, CRect& m_rt, int iFont = 0, int iFace = 0, int format = FORMAT_NORMAL);	int DrawText(char *str, int iFont = 0, int iFace = 0, int format = FORMAT_NORMAL);	CPrintRX();	virtual ~CPrintRX();private:	CDC m_DC; // 打印的设备内容	HDC m_hPrinter; // 当给定了一个打印机的时候使用	CDC m_PrinterDC; // 没有指定打印机的时候使用	CFont* m_font[10][4];// 存放字体的的变量	int m_nFonts; // 现有的字体数	int m_iFont; // 使用的字体索引	int m_iFace[10]; // 使用的风格索引	int m_nCopies; // 打印的份数	CSize m_WorkSize; // 纸张的物理的宽度,以打印机的像素数为准	CRect m_Margins; // 使用范围,以屏幕的像素数为准	int m_yCur; // 当前的鼠标的位置Y	int m_xCur; // 当前的鼠标的位置X	int m_Abstand; // 行间距	int m_iPage; // 当前的页数	int m_LastErrNo; // 最后一个错误值	CPrintDialog *m_pPrintDlg; // 使用打印机设置对话框};
在使用时候流程是这样的:
CPrintRX m_Print; m_Print.InitToPrint(NULL, 1); // 调用打印对话框,初始化得到设备内容 m_Print.StartPrint(); // 开始一个新的打印作业 m_Print.StartPage(); // 开始新的一页 CPen newPen; // 新建一个画笔 newPen.CreatePen (PS_SOLID, 3, RGB(0,0,0)); m_Print.DrawVLine(x_pos[0], y_pos[0], x_pos[0], y_pos[29], newPen); // 画横线 m_Print.EndPage(); m_Print.EndPrint(); // 结束打印
三、在测试程序中的打印效果如下


图一 打印效果扫描图

四、当然,这个类实现的比较简单,还没有画位图的功能,但是可以给做相关的工作的朋友一些帮助。也希望朋友们把它做的更加完善。