一个打印报表的简单的类

2016-01-29 11:57 21 1 收藏

一个打印报表的简单的类,一个打印报表的简单的类

【 tulaoshi.com - C语言心得技巧 】

一个打印报表的简单的类


作者:李静南

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)


下载源代码

一、前两天为公司改程序,其中有一部分是要打印出报表。原来的程序是调用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;         // 当前的鼠标的位置Yint  m_xCur;         // 当前的鼠标的位置Xint  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(); // 开始新的一页 CPennewPen; // 新建一个画笔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(); // 结束打印
三、在测试程序中的打印效果如下


图一 打印效果扫描图

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

来源:http://www.tulaoshi.com/n/20160129/1484000.html

延伸阅读
标签: Web开发
结合一个存储过程,将分页做成最简单,请看以下源码 此分页类所操作的存储过程#region 此分页类所操作的存储过程 /**//*********************************************************  *  * 功能强大,配合以下这个存储过程  *  * *******************************************************...
标签: Web开发
程序代码: script type="text/javascript" function Ajax(sUrl,sRecvTyp,sQueryString,oResultFunc) { this.Url = sUrl; this.QueryString = sQueryString; this.XmlHttp = this.createXMLHttpRequest(); if (this.XmlHttp == null) { alert("erro"); return; } var objxml = this.XmlHttp; objxml.onreadystatechange = function (){Ajax.han...
标签: Web开发
非常不错的一个javascript 类 代码如下: /*    *  Author:aoao  *    Homepage:http://www.loaoao.com  *  Email:loaoao@gmail.com / QQ:2222342  *  Copyright (c) 2006 aoao  *  Licensed under ...
CRAS是一个MFC类,它封装了Windows 的远程访问服务(Remote Access Service)。这个类的主要优点是通过LAN便可以连接到Internet,并且不用安装RAS,因为RAS DLLs是动态加载的。[豆豆技术提供(ddvip.com)] CRAS的使用非常简单。将CRAS文件添加到工程中,创建一个CRAS类实例并调用它的Initialize方法即可。 BOOL CRAS::Initialize ...
标签: Java JAVA基础
根据这些特点,对队列定义了以下六种操作: enq(x) 向队列插入一个值为x的元素; deq() 从队列删除一个元素; front() 从队列中读一个元素,但队列保持不变; empty() 判断队列是否为空,空则返回真; clear() 清空队列; search(x) 查找距队首最近的元素的位置,...

经验教程

275

收藏

58
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部