首页 (VC++ 编程指南)-8¸6 打印和打印预览

(VC++ 编程指南)-8¸6 打印和打印预览

举报
开通vip

(VC++ 编程指南)-8¸6 打印和打印预览(VC++ 编程指南)-8¸6 打印和打印预览 8.6 最后,我们要给绘图程序增加打印和打印预览功能。我们希望文档分两页打印,第一页为封面, 打印文档名字。第二页输出文档内容,并在页眉上打印文档名字。虽然AppWizard已经自动生成了打印和打印预览的代码,但是许多情况下,并不能符合要求。 这是因为: 1.打印机和窗口(屏幕)显示的分辨率不同:打印机的分辨率用每英寸多少个点来描述,屏幕分辨率 用单位面积的像素点来表示。对于同样的Arial字体下的一个字符,在屏幕上用20个像素表示,而在打印机上则需要50点。...

(VC++ 编程指南)-8¸6 打印和打印预览
(VC++ 编程指南)-8¸6 打印和打印预览 8.6 最后,我们要给绘图程序增加打印和打印预览功能。我们希望文档分两页打印,第一页为封面, 打印文档名字。第二页输出文档内容,并在页眉上打印文档名字。虽然AppWizard已经自动生成了打印和打印预览的代码,但是许多情况下,并不能符合要求。 这是因为: 1.打印机和窗口(屏幕)显示的分辨率不同:打印机的分辨率用每英寸多少个点来描述,屏幕分辨率 用单位面积的像素点来 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示。对于同样的Arial字体下的一个字符,在屏幕上用20个像素表示,而在打印机上则需要50点。在编辑器程序中,使用的映射模式为MM_TEXT,在这种模式下,一个逻辑单位对应于一个像素点。我们已经知道,Windows是按照逻辑单位来绘图的。这样,根据MM_TEXT模 式的逻辑单位(实际上也就是像素数目)决定比例的原则打印出来得内容自然要比屏幕上看到的要小 的多。因此,前面在初始化视图OnInitialUpdate时候,在选择绘图的映射模式上,没有采用以前使 用的缺省的MM_TEXT模式,而是采用了MM_LOENGLISH。 2.窗口和打印机对边界的处理不同:窗口可以看作是无边界的,可以在窗口外面画,而不会引起错误, 窗口会自动剪裁超出边界的图形。但打印机却不同,它是按页打印的。打印输出时必须自己处理分页 和换页,如果不作这样的处理的话,行和行之间就会叠加起来。 要正确打印输出屏幕上的内容,就必须解决以上两个问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 。对于第一个问题,有两种方法:一是 利用SetMapMode(int nMode) 设置别的映射模式,比如采用MM_LOENGLISH,不用像素而是采用0.01inch来衡量。 要处理打印分页、换页,就必须修改框架处理打印消息的缺省行为,在其中计算和换页。此外, 我们还希望在打印时在页眉处能够输出标题(使用文件名作为标题)、在页脚处输出页码。 为了实现打印和打印预览功能,首先需要了解MFC的打印体系结构,即框架是如何处理打印文档 的要求的。 MFC的打印工作大致上是这样进行的: 1.显示Print对话框 2.创建一个与当前打印机设置相匹配的设备上下文(CDC)对象。 3.设置要打印的页数 4.调用CDC::StartDoc开始打印 5.用CDC::StartPage开始打印一页 6.调用视图的OnDraw()方法打印输出一页内容 7.用CDC::EndPage结束一页的打印 8.循环输出全部内容 9.用CDC::EndDoc结束打印 10.视图作打印的清理工作 框架的打印文档功能是从OnPreparePrinting(CPrintInfo* pInfo)开始的,在缺省的情况下,它只是简单的调用视图的DoPreparePrinting()函数。DoPreparePrinting()显示Print对话框,并 创建与打印机相匹配的设备上下文。如果要想改变打印机初始设置,可以在这里改。缺省设置下,使 用1作为第一页编号(注意:打印的页号是从1开始编号而不是0),用0xFFFF作为文档的最后一页编号。因为Draw要求分两页打印输出,因此要在这里设置打印页数。要设置打印页数,可以调用 CPrintInfo::SetMaxPage(nMaxPage)。同时还将预览页数也设置为两页。 BOOL CDrawView::OnPreparePrinting(CPrintInfo* pInfo) { } DoPreparePrinting显示Print对话框。返回时,CPrintInfo结构包含了用户所指定的值,包括 起止页号、最大页号、最小页号等。 OnBeginPrinting()在OnPreparePrinting()被调用之后实际打印之前调用。OnBeginPrinting()用于分配GDI资源,这里使用缺省行为。 OnPrepareDC用作屏幕显示时,在绘图前调整DC。在用于打印时,OnPrepareDC也完成类似功能。 OnPrint完成真正的打印一页文档的工作。它把一个打印机设备上下文传给OnDraw,由OnDraw负责打印输出。可以把那些适合于打印但是不适合于屏幕输出的工作,如打印页眉和页脚,放在 OnPrint()的重载中完成,然后再调用OnDraw完成打印和显示都需要的工作。现在,我们就在OnPrint中加入打印页眉和页脚的代码。OnPrint不是由AppWizard自动生成的,首先要用ClassWizard为CDrawView增加OnPrint()方法。然后添加绘图程序的特殊打印代码,见清单8.10。 void CDrawView::OnPrint(CDC* pDC, CPrintInfo* pInfo) { } OnPrint()首先根据CPrintInfo类型的pInfo中m_nCurPage(保存当前打印页号信息)判断当 前打印的是不是第一页。如果是第一页,就打印输出封面。否则,首先调用PrintPageHeader打印页眉。然后用SetWindowOrg调整打印输出原点位置。m_rectDraw又是CPrintInfo结构的一个重要数据成员,它保存的是打印输出的矩形边界。最后将与打印机匹配的设备上下文传给OnDraw,由OnDraw在打印机上输出。注意这里使用的映射模式为MM_LOENGLISH,它的y轴方向是向上递增的。 PrintTitlePage打印输出文档的封面。它首先定义一种逻辑字体,设置逻辑字体属性,然后由 调用CreateFontIndirect由逻辑字体创建字体。SetTextAlign(TA_CENTER)将文本设置为居中输出。 然后调用TextOut在打印矩形m_rectDraw上输出封面。PrintTitlePage函数定义见清单8.11。 PrintPageHeader在页眉位置输出文件名,然后从m_rectDraw扣除页眉的大小。 作为一个练习,读者可以修改OnPrint()并增加一个PrintPageFooter()函数,在每一页的页脚 处输出打印的页号。注意调用OnDraw之前,要从m_rectDraw中扣除页脚的高度。
本文档为【(VC++ 编程指南)-8¸6 打印和打印预览】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_833902
暂无简介~
格式:doc
大小:16KB
软件:Word
页数:0
分类:互联网
上传时间:2017-11-02
浏览量:22