WEB开发网      婵犵數濮烽弫鍛婄箾閳ь剚绻涙担鍐叉搐绾剧懓鈹戦悩瀹犲闁汇倗鍋撻妵鍕箛閸洘顎嶉梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě浣插亾閹烘鈷掗柛鏇ㄥ亜椤忣參鏌″畝瀣暠閾伙絽銆掑鐓庣仭缁楁垿姊绘担绛嬪殭婵﹫绠撻、姘愁樄婵犫偓娴g硶鏀介柣妯款嚋瀹搞儱螖閻樺弶鍟炵紒鍌氱Ч瀹曟粏顦寸痪鎯с偢瀵爼宕煎☉妯侯瀳缂備焦顨嗗畝鎼佸蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮⒑鐠団€虫灀闁哄懐濮撮悾鐤亹閹烘繃鏅濋梺闈涚墕濡瑩顢欒箛鏃傜瘈闁汇垽娼ф禒锕傛煕閵娿儳鍩f鐐村姍楠炴﹢顢欓懖鈺嬬幢闂備浇顫夊畷妯肩矓椤旇¥浜归柟鐑樻尭娴滃綊姊虹紒妯虹仸闁挎洍鏅涜灋闁告洦鍨遍埛鎴︽煙閼测晛浠滃┑鈥炽偢閹鈽夐幒鎾寸彇缂備緡鍠栭鍛搭敇閸忕厧绶炴俊顖滅帛濞呭洭姊绘担鐟邦嚋缂佽鍊垮缁樼節閸ャ劍娅囬梺绋挎湰缁嬫捇宕㈤悽鍛婄厽閹兼番鍨婚埊鏇㈡煥濮樿埖鐓熼煫鍥ュ劤缁嬭崵绱掔紒妯肩畺缂佺粯绻堝畷姗€濡歌缁辨繈姊绘担绛嬪殐闁搞劋鍗冲畷顖炲级閹寸姵娈鹃梺缁樻⒒閳峰牓寮崒鐐寸厱闁抽敮鍋撻柡鍛懅濡叉劕螣鐞涒剝鏂€闂佺粯鍔曞Ο濠囧吹閻斿皝鏀芥い鏃囨閸斻倝鎽堕悙鐑樼厱闁哄洢鍔屾晶顖炴煕濞嗗繒绠婚柡灞界Ч瀹曨偊宕熼鈧▍锝囩磽娴f彃浜炬繝銏f硾椤戝洨绮绘ィ鍐╃厵閻庢稒岣跨粻姗€鏌ㄥ☉妯夹fい銊e劦閹瑩顢旈崟顓濈礄闂備浇顕栭崰鏍礊婵犲倻鏆﹂柟顖炲亰濡茶鈹戦埄鍐ㄧ祷妞ゎ厾鍏樺璇测槈閵忕姈鈺呮煏婢跺牆鍔撮柛鏂款槺缁辨挻鎷呯粙搴撳亾閸濄儳鐭撶憸鐗堝笒閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓 ---闂傚倸鍊搁崐鐑芥倿閿旈敮鍋撶粭娑樺幘濞差亜鐓涢柛娑卞幘椤斿棝姊虹捄銊ユ珢闁瑰嚖鎷�
开发学院软件开发VC 一个打印报表的简单的类 阅读

一个打印报表的简单的类

 2010-06-23 20:40:54 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫岄梺鍦拡閸嬪棝鎯€椤忓浂妯勯梺鍝勬湰濞叉ḿ鎹㈠┑濠勭杸闁哄洨濮烽悰銉╂⒒娴e搫甯跺鐟帮攻缁傚秴饪伴崼姘e亾閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡涱€楀褜鍠栭湁闁绘ɑ鐟ョ€氼喚绮绘ィ鍐╃厱妞ゆ劑鍊曢弸搴ㄦ煟韫囧鍔滈柕鍥у瀵潙螣閸濆嫬袝婵$偑鍊戦崹娲偡閳哄懎绠栭柍鈺佸暞閸庣喖鏌曢崶褍绨婚柟鍑ゆ嫹
核心提示:一、前两天为公司改程序,其中有一部分是要打印出报表,一个打印报表的简单的类,原来的程序是调用VB写的一个程序,那个程序用VBA方式实现的,还没有画位图的功能,但是可以给做相关的工作的朋友一些帮助,在一个空的WORD表格模板里填入数据,让WORD去打印

一、前两天为公司改程序,其中有一部分是要打印出报表。原来的程序是调用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(); // 结束打印

三、在测试程序中的打印效果如下

图一 打印效果扫描图

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

本文配套源码

Tags:一个 打印 报表

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接