当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 对话框打印预览及打印

VC++
用 auto_ptr 类模板帮助动态内存管理
走近 STL
一步一步学STL标准模板库
使用 <multimap> 库创建重复键关联容器
使用 <map> 库创建关联容器
用 vectors 改进内存的再分配
用函数模板实现和优化抽象操作
STL 字符串类与 UNICODE 及其它......
如何在Dll中导出STL类
再谈“在STL列表(Lists)中插入不同类型的对象”
使用::std::vector<>作为管理动态数组的优先选择
三种常见中文内码的转换方法
JNI 中文处理问题小结
构建 GB2312 汉字库的 unicode 码表
正则表达式简介
在非MFC程序中引用CString
UTF-8与GB2312之间的互换
宽字符标量L"xx"在VC6.0/7.0和GNU g++中的不同实现
用VC++设计语法编辑器
C语言中对时间和日期的处理

VC++ 中的 对话框打印预览及打印


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 142 ::
收藏到网摘: n/a

对话框打印预览及打印

作者:张子林

下载源代码

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

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