打印编程.ppt_第1页
打印编程.ppt_第2页
打印编程.ppt_第3页
打印编程.ppt_第4页
打印编程.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 8 章 打印编程 8.1 基本打印功能 8.2 设置打印坐标系 8.3 多页打印 8.4 高级打印,Visual C+程序设计与应用教程,2,8.1 基本打印功能,在使用应用程序向导(AppWizard)生成应用程序的过程中,如果在第四步不取消对打印和打印预览的设置,那么应用程序就已经具备了简单的打印和打印预览功能。,3,8.1.1 打印原理,在文档/视图结构应用程序,CDocument类负责数据的生成和储存,CView类负责数据的显示和用户交互。输出到屏幕和输出到打印机都是数据的显示,实质上是一样的,因此打印功能也是由CView类来实现的。,4,5,默认的函数Cview:OnPrint(

2、 )中只是调用成员函数OnDraw( ),而没有进行其他操作。在以前的程序中,并不考虑打印问题,因此我们只需考虑在OnDraw()中如何完成屏幕输出工作。但现在在OnDraw()中添加代码时,就必须小心这有可能是在进行打印,并不仅向一个窗口输出。如果这两个函数在程序中不能统一,就必须分开考虑。分开考虑时有两种方法: (1) 分别在OnPaint()和OnPrint()这两个函数中完成屏幕输出和打印输出工作,而不必依赖于OnDraw()函数。 (2) 在OnDraw()函数中,调用pDC-IsPrinting()或设置变量来识别目前进行的输出工作并区别对待。,6,【例8.1】编写一个单文档应用程

3、序MyPrint,实现简单的打印功能。,7,应用程序的【File】菜单条中自动添加【打印】、【打印预览】和【打印设置】3个菜单项。应用程序基本打印功能的实现主要是由消息映射宏和消息处理函数完成的。,8,(1) 在应用程序视图类CMyPrintView的消息映射宏中包含了以下打印和打印预览命令的消息映射代码: BEGIN_MESSAGE_MAP(CMyPrintView, CScrollView) / Standard printing commands ON_COMMAND(ID_FILE_PRINT, CScrollView:OnFilePrint) ON_COMMAND(ID_FILE_P

4、RINT_DIRECT, CScrollView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView:OnFilePrintPreview) END_MESSAGE_MAP(),9,(2)在CMyPrintApp类的消息映射宏中包含了打印设置的以下消息映射代码: BEGIN_MESSAGE_MAP(CMyPrintApp, CWinApp) / Standard file based document commands ON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew) ON_COMMAND(I

5、D_FILE_OPEN, CWinApp:OnFileOpen) / Standard print setup command ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp:OnFilePrintSetup) END_MESSAGE_MAP(),10,(3) 在CMyPrintView.cpp文件中由系统自动生成了以下3个函数: BOOL CMyPrintView:OnPreparePrinting(CPrintInfo* pInfo) / default preparation return DoPreparePrinting(pInfo); void CM

6、yPrintView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) / TODO: add extra initialization before printing void CMyPrintView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) / TODO: add cleanup after printing ,11,8.1.2 CPrintInfo类,CPrintInfo类保存了打印和打印预览的相关信息,当用户单击【File】菜单的【打印】或【打印预览】命令时,系统自动创

7、建一个CPrintInfo类对象,用于保存用户打印设置的信息。当打印操作结束时,系统自动删除CPrintInfo类对象。在打印过程中,CPrintInfo类在框架窗口和CView类之间起着消息传递的作用。,12,8.1.3 打印过程,一个打印作业由以下几步构成: (1)如果执行打印预览命令,框架窗口将调用CView:OnPreparePrinting()函数,创建与当前默认打印机相关的设备描述对象,对CPrintInfo类中的一些成员变量赋值或调用类成员函数来控制打印的方式,调用DoPreparePrinting()函数。 如果执行打印命令,DoPreparePrinting()函数将显示打印

8、对话框。在对话框中,用户可 以设置打印范围,选择打印机、打印份数。,13,(2)调用CView:OnBeginPrinting()函数分配打印过程所需要的系统资源。 (3)调用CDC:StartDoc()启动主打印循环。 (4)打印新页时,框架窗口首先调用CView:OnPrepareDC(),在打印之前根据当前打印机的设备描述表进行调整。 如果事先不知道需要打印多少页,则被重载的OnPrepareDC()函数可以检测文档的结束。如果文档结束,将CPrintInfo:m_bContinuePrinting值设置为FALSE,跳到(6);否则,设置CPrintInfo:m_bContinuePr

9、inting的值为TRUE,继续进行打印。,14,(5) 调用CDC:StartPage()、CView:OnPrint()和CDC:EndPage()进行打印。在默认情况下,OnPrint()函数首先调用OnPrepareDC()函数对坐标进行变换,然后调用OnDraw()函数往打印机里输出数据。 (6) 当m_bContinuePrinting为FALSE时,打印结束。调用CDC:EndDoc()函数释放在 打印过程中占用的各种资源。 (7) 调用OnEndPrinting()函数,结束打印。,15,16,8.1.4 打印预览,打印预览命令的执行可以分成以下几个步骤: 主框架窗口执行OnF

10、ilePreparePrint()函数。在OnFilePreparePrint()函数中,执行 OnPreparePrinting(CPrintlnfo*pInfo)函数,检测m_bPreview变量是否为TRUE。如果是,则对CPrintInfo类中的一些成员变量赋值或调用类成员函数来控制打印预览的方式。 调用CView:DoPreparePrinting()函数,显示打印预览界面。 调用OnDraw()函数按照打印机的设备描述表往屏幕输出数据,利用屏幕来模拟显 示打印结果。,17,8.2 设置打印坐标系,8.2.1 Windows映射模式,Windows映射模式就是Windows下的坐标方

11、式。在Windows操作系统中,存在两种类型的坐标:设备坐标和逻辑坐标。当向设备输出图形时,Windows先映射当前逻辑坐标到物理坐标(例如打印机),然后显示图形输出。,18,19,8.2.2 映射模式的设置,在MFC应用程序中,通过调用CDC类的SetMapMode()函数设置映射方式。如在视图类的OnDraw()函数中,可以通过以下代码设置映射方式: pDC- SetMapMode(n); 其中,n为上表中列出的映射方式。,20,【例8.2】完善例8.1中的程序MyPrint,使打印输出的图形与显示器显示的图形大小基本一样。,21,8.3 多页打印,8.3.1 默认打印存在的不足,【例8.

12、3】完善例8.2中的程序MyPrint,程序运行后,屏幕上能显示50个矩形。,22,8.3.2 实现多页打印功能,如果要使程序支持多页打印功能,首先在打印之前设置要打印的页数,然后设置每一页视图原点的打印坐标。 1设置要打印的页数 一般在OnBeginPrinting()函数中设置要打印的页数,通过CPrintInfo类的SetMaxPage()和SetMinPage()函数实现。,23,【例8.4】完善例8.3中的程序MyPrint,设置要打印的页数,24,2设置正确的视图原点,为了正确打印每一页,需要设置每页打印的内容对应于坐标的那一部分区域。第一页视图原点的打印坐标为0,第二页视图原点的

13、打印坐标下移一个页的高度,依此类推。 可以在OnPrepareDC()函数中通过调用CDC类成员函数SetViewPortOrg( )设置当前页的视图原点坐标。由于这些设置在OnPrint()和OnDraw()都起作用,既影响打印又影响显示器显示,因此必须调用CDC类的成员函数IsPrinting()来判断当前状态是打印输出还是显示器显示。,25,【例8.5】完善例8.4中的程序MyPrint,设置正确的视图原点。,26,8.4高级打印,8.4.1 页眉和页脚,完整的打印和打印预览程序包括控制页边距,设计页眉页脚、多页打印以及预览等功能。 页眉和页脚可以醒目地向用户提示一些重要的信息,如文章标题、页码等。,27,添加打印页眉、页脚的程序代码可以分两步进行: (1) 页眉和页脚将在打印纸上占用一定的空间,如果打印区域太大,有可能和正文打印区域相重叠,被正文所覆盖。因此,应在OnPrint()函数中利用CPrintInfo*pInfo的成员变量m_rectDraw来设置打印页上打印区域的大小。 (2) 在m_rectDraw范围之外打印页眉和页脚。,28,8.4.2 设置页边距,页边距是指打印的文本区域与打印纸边界之间的距离,包括左、右、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论