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

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 118 ::
收藏到网摘: 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);

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