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

對話框打印預覽及打印

編輯:關於VC++

近來我在用VC開發一套MIS時沒有用MFC的文檔視圖模板,所以在打印這上面就只好自己寫了一套,用起來感覺還可以,所以寫出來大家一起修正一下吧,也許能給大家起點作用吧! 系統UI是基於對話框的,大家如果感覺不錯可以進行自我修正! 我們先來看看程序界面:

其中的學生數據現在我們已從數據庫取出放在,ListCtrl控件中了,這樣就為我們在打印時提供了方便,不需要再去數據重新提取數據了。 在點了打印按鈕後,打印預覽界面:

在預覽界面中,提供了鼠標上下左右滾動功能。好了來說代碼吧,在此共用了兩個繼承 Cdialog 的類:

1、CpreParent

2、CpreView

CpreParent 作為最外面的控制窗口, CpreView作為真正的預覽窗口。

CpreParent窗口內包括一個平面打印控制工具欄及一個預覽窗口CpreView

按鈕左右順序功分別為:

1、報表第一頁

2、報表上一頁

3、跳轉到報表頁

4、報表下一頁

5、報表最後頁

6、退出

7、打印

我們來看在對話框打印按鈕中的代碼是如果來調用 CpreParent 的:在此我們要用到這樣一個結構:

//打印結構
typedef struct
{
  int   nMaxLine;    //ClistCtrl中的最大行數
  int  nCountPage;    //一共頁數
  int  nCurPage;    //當前頁碼
  BOOL  IsPrint;      //是否打印,false 表示預覽
  HWND  hWnd;      //窗口句柄
  HWND  hListView;    //列表控件句柄
  TCHAR  szTag[256];    //其它數據
  int  nTag;      //其它數據
  LPVOID  lpVoid;      //其它數據
}PRNINFO, *PPRNINFO;
//打印按鈕代碼
void CXJWH::OnPrint() //注這裡的 CXJWH 為數據管理窗口即打印類的調用窗口
{
  if(CLtv。GetItemCount()<= 0)  //CLtv 為ClistCtrl, 這裡檢測是否有數據在列表中
    return;

  PRNINFO PrnInfo = {0};    //此為用到的一個結構, 見下面定義
  PrnInfo。hListView = CLtv。m_hWnd;  //ClistCtrl的句柄
  PrnInfo。hWnd = this->m_hWnd;  //當前窗口句柄
  PrnInfo。IsPrint = FALSE;    //當前為預覽
  PrnInfo。nCurPage = 1;    //當前頁為第一頁
  PrnInfo。nMaxLine = CLtv。GetItemCount();  //ClistCtrl中的數據行數

  CPreParent DlgPreView;    //聲明打印類

  DlgPreView。SetCallBackFun(DrawInfo, PrnInfo);  //在這裡給它設定我們自己的打印函數

  DlgPreView。DoModal();    //預覽
}

注: 這裡的 DlgPreView.SetCallBackFun(DrawInfo,PrnInfo);

DrawInfo 是我們在 CXJWH 定義好的靜態打印函數。

static void DrawInfo(CDC &memDC,PRNINFO PrnInfo);

由於本人寫作水平有限,所以還是請大家看代碼吧!

本文配套源碼

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