Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9727493
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-03-10 21:21:42

近来我在用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);

由于本人写作水平有限,所以还是请大家看代码吧!

阅读(2076) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-06-09 11:34:36

看不到代码