随笔-59  评论-36  文章-0  trackbacks-0
文档打印是许多Windows程序所必需的,在DOS下进行图形方面的打印是件比较麻烦的事,幸好Windows提供了统一接口,将程序员与具体的硬件系统隔离开来。同时Visual   C++   MFC(微软基础类库)则将Windows的API函数以类的形式封装了很多细节,使得许多烦琐的工作变得轻松起来。  

一般来说,用Visual   C++编制需要打印的程序时,在用AppWizard生成工程文件时就加入打印和打印预览选项(该选项在AppWizard的第四步)。若用手工加入,则稍微麻烦些。  

MFC对于打印的支持是在视类CView中实现的,该类中有如下几个成员函数是与打印或打印预览有关的:  

BOOL   OnPreparePrinting(CPrintInfopInfo)  

void   OnBeginPrinting(CDCpDC,   CPrintInfopInfo)  

void   OnPrepareDC(CDCpDC,   CPrintInfopInfo)  

void   OnPrint(CDCpDC,   CPrintInfopInfo)  

void   OnEndPrinting(CDCpDC,   CPrintInfopInfo)  

其中,pDC是打印或显示的设备场指针,pInfo是打印过程信息指针。pInfo包含许多有用的信息,如打印的总页数、当前打印页的页码、是打印还是打印预览、是否继续打印等,具体参数内容和意义可以参考MFC联机手册。  

以上几个函数都是虚函数,可以重载。若在用AppWizard生成工程文件时选择了打印和打印预览选项,则函数OnPreparePrinting、OnBeginPrinting、OnEndPrinting自动地被AppWizard插入到你的视类中加以重载。另外两个函数则可以手工加入,如果使用的是Visual   C++   4.0以上版本,可以通过ClassWizard加入到视类中。  

这几个函数在用户选择打印命令时由应用框架自动调用,用户程序不用显式调用。下面讲述这几个函数在打印过程中的调用顺序及其意义。  

1.OnPreparePrinting  

OnPreparePrinting函数最先被调用,用来初始化打印机等。比如,若没有安装打印机,则该函数将提示用户安装打印机。用户程序可以向其中加入别的初始化代码,比如,计算打印你的文档所需要的总页数,然后调用视类中的打印机初始化函数BOOL   DoPreparePrinting(CPrintInfopInfo)即可。而用AppWizard生成的代码中,OnPreparePrinting函数将只是调用函数DoPreparePrinting,并传递参数。  

2.OnBeingPrinting  

OnBeingPrinting函数是开始打印文档前调用的函数,用户可以在其中加入另一些对于打印过程的初始化代码,比如分配打印过程中将要使用的“笔”(CPen)、“刷子”(CBrush)等,默认的代码中该函数将直接返回。  

3.OnEndPrinting  

OnEndPrinting函数是与OnBeginPrinting函数相对应的函数,它在打印完成后由应用框架调用,用于释放在OnBeginPrinting中分配的“对象”,如“笔”、“刷子”等,其默认的代码中该函数将直接返回。  

4.OnPrepareDC  

OnPrepareDC函数用于在打印前准备打印设备场,如窗口大小、原点,视图大小、原点等。同时该函数在视类显示文档内容时也被调用,默认的代码中该函数调用基类中的OnPrepareDC函数。  

5.OnPrint  

OnPrint函数则是具体的打印过程,它利用前面准备好的设备场进行打印。  

这几个函数中,OnPreparePrinting、OnBeginPrinting、OnEndPrinting函数在一次打印过程中将只被调用一次,不管这一次打印内容有多少页,而OnPrepareDC、OnPrint函数则每打印一页都将被调用一次,这种调用次序对于打印是很有用的。  

在编程中,相信大家只要用好这几个基本函数,一定会编制出满意的Windows打印程序。
posted on 2010-07-15 23:53 zhaoyg 阅读(615) 评论(0)  编辑 收藏 引用 所属分类: MFC学习笔记

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理