程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 一個打印報表的簡單的類

一個打印報表的簡單的類

編輯:關於VC++

一、前兩天為公司改程序,其中有一部分是要打印出報表。原來的程序是調用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(); // 結束打印

三、在測試程序中的打印效果如下

圖一 打印效果掃描圖

四、當然,這個類實現的比較簡單,還沒有畫位圖的功能,但是可以給做相關的工作的朋友一些幫助。也希望朋友們把它做的更加完善。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved