C5.0 为Windows 的程序员提供了一个很好的C++(www.cppentry.com) 开发环境,减少了很多编程(www.cppentry.com)负担,但同时也为我们在程序中加入自己的思想增加了难度。本人在一软件开发中,想控制文字打印时的字体,使字体大小缩小一倍,以节省打印纸。经过一段时间的摸索,终于解决了这一问题,下面分几步向大家做一介绍。
---- 一、对VC5 自动生成的程序框架进行改进
---- 这里用VC5 自动创建一个例子程序Test,单文档界面,注意在最后一步修改view 的继承类为CEditView。
---- 在view 类中,VC5 已经自动创建了三个用于支持打印的函数:OnPreparePrinting,OnBeginPrinting,OnEndPrinting。为了实现我们的功能,需要再继承以下几个函数:OnPrepareDC,OnPrint。并将OnPrepareDC 和OnEndPrinting 改为如下实现:
// OnPrepareDC() void CTestView::OnPrepareDC (CDC* pDC, CPrintInfo* pInfo) { CView::OnPrepareDC(pDC, pInfo); }
// OnEndPrinting() void CTestView::OnEndPrinting (CDC* pDC, CPrintInfo* pInfo) { CView::OnEndPrinting(pDC, pInfo); } ---- 用CView 来替代原来的CEditView,用以避免CEidtView 对打印的控制。控制字体及输出的功能主要在OnBeginPrinting 和OnPrint 两个函数来实现。
---- 二、实现OnBeginPrinting 函数
---- 根据VC5 编程(www.cppentry.com)机制,在OnBeginPrinting 函数实现打印前的准备工作,包括设置打印字体,根据打印机当前页面尺寸计算所需页数等。下面的程序是对打印字体的重新设置和计算所需打印纸页数。
---- 程序中首先取得打印机的横向和纵向分辨率,再得到当前打印字体的大小,然后计算出新的字体大小,为默认字体的一半。读者可以根据需要设定自己的打印字体大小。
---- 接着,取得当前打印纸的宽度和高度,再根据新字体的宽度和高度计算出每行的最大字符数和每页的最大行数。
---- 由于打印文件中有些行的宽度可能超过每行的最大字符数,所以程序中调用函数RedealTextData() 对打印文件进行重新整理,函数的实现在下面介绍。
---- 最后,程序中计算并设置所需的打印页数。
OnBeginPrinting()函数实现如下: //==================================== // OnBeginPrinting //==================================== void CTestView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) { //设置新的 |