MFC打印

 

 

 部分来自 阿飞家园(sohu博客)加入自己整理内容

 

MFC的文档/视图结构使我们的打印工作变得更加便捷,为了便于明晰打印流程,让我们了解一下MFC在背后“偷偷”为我们做了哪些工作。

1> 创建打印设备描述表并在打印结束后删除它

2> 调用StartDocEndDoc来开始和结束打印工作

3> 调用StartPageEndPage来开始和结束每一页

在文档/视图结构的程序中实现打印的关键是一组CView类的虚函数,主框架要在打印处理的不同阶段调用他们,实际使用时我们可以根据需要覆盖这些函数,这里我建议用MFCClass Wizard把下边的5个函数全部覆盖。

1> OnPreparePrinting

            在设置打印参数时调用,可以给主框架提供打印页数和其他与打印有关的信息

2> OnBeginPrinting

            在打印开始前调用,可以用来分配字体和其他打印需要的资源

3> OnPrepareDC

在每一页打印之前调用,可以用来指定视口原点位置并在OnDraw打印下页之前设置剪贴区域

4> OnPrint

在每一页打印时调用,可以用来打印页眉、页角以及其他没有用OnDraw或者不依赖OnDraw打印的页面元素

5> OnEndPrinting

            打印结束后调用,可以用来释放OnBeginPrinting中分配的资源

实现MFC应用程序打印功能有两种方法,一种是让OnDraw函数既处理屏幕输出又处理打印输出;另一种是让OnDraw处理屏幕输出而让OnPrint处理打印输出。用OnDraw函数处理打印的话必然会添加很多打印特有的代码段,而且为了让打印功能更加完备,通常必需要在OnPrint函数中添加打印页眉、页角等代码,使得程序看起来比较凌乱。依我个人的经验,打印和屏幕输出有很多应该是不同的,比如在屏幕输出时我们可以设置很多背景和线条颜色,如果打印也这么设置的话必然会造成打印输出缓慢(要打印的象素多),有时打印机是黑白的,再多色彩打出来也就那么两三种颜色,得不偿失。当然打印图片得程序是个例外。我们通常更实际得把打印机输出得程序段放在OnPrint中,把屏幕输出程序段放在OnDraw中,我们这里仅介绍这种方法。

1. OnPreparePinting函数

   BOOL OnPreparePrinting(CPrintInfo* pInfo)

   {

       pInfo->SetMaxPage(10);

       pInfo->m_bPreview = True(预览,不显示对话框)/False(打印,显示打印对话框);

       return DoPreparePrinting(pInfo);

   }

   参数pInfo包含了很多打印工作参数的信息,包括最小和最大页数,默认为10xFFFF0xFFFF告诉主框架最大页数还不知道。MFC会在打印对话框的To框中显示最大页编码。CPrintInfo类有很多函数设置打印参数,具体可参考MSDN

   注意:GetFromPageGetToPage返回用户在“打印”对话框中选择的页码范围,由于是在DoPreparePrinting之后显示打印对话框,所以要注意在DoPreparePrinting函数之后调用他们。

 

2. OnBeginPrintingOnEndPrinting函数

   实际上打印的页数通常由页面大小来决定,而我们调用OnPreparePinting函数时通常是不知道的,如果在   OnPreparePinting函数中没有设置最大页数,可以在OnBeginPrinting函数中设置ÿ

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值