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

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 73 ::
收藏到网摘: 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(); // 结束打印
三、在测试程序中的打印效果如下


图一 打印效果扫描图

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