用MFC编制Windows打印程序
发表于:2007-07-04来源:作者:点击数:
标签:
牛霜霞 文档打印是许多 Windows 程序所必需的,在DOS下进行图形方面的打印是件比较麻烦的事,幸好Windows提供了统一接口,将 程序员 与具体的硬件系统隔离开来。同时Visual C++ MFC(微软基础类库)则将Windows的API函数以类的形式封装了很多细节,使得许多烦
牛霜霞
文档打印是许多
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打印程序。
原文转自:http://www.ltesting.net