RTF技术扩展-如何实现完美的分页打印

上传人:ji****72 文档编号:37534710 上传时间:2018-04-18 格式:DOC 页数:12 大小:244.50KB
返回 下载 相关 举报
RTF技术扩展-如何实现完美的分页打印_第1页
第1页 / 共12页
RTF技术扩展-如何实现完美的分页打印_第2页
第2页 / 共12页
RTF技术扩展-如何实现完美的分页打印_第3页
第3页 / 共12页
RTF技术扩展-如何实现完美的分页打印_第4页
第4页 / 共12页
RTF技术扩展-如何实现完美的分页打印_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《RTF技术扩展-如何实现完美的分页打印》由会员分享,可在线阅读,更多相关《RTF技术扩展-如何实现完美的分页打印(12页珍藏版)》请在金锄头文库上搜索。

1、RTF 技术扩展技术扩展 如何实现完美的分页打印如何实现完美的分页打印摘要:摘要: 本文给出了一种完美实现 RTF 文件分页打印的方法,并根据此方法实现了 RTF 文件的打印预览 及打印。通过本方法实现的 RTF 文件的 WYSIWYG(所见即所得)显示、分页预览及分页打印三者在效 果上完全一致,解决了以前预览与打印存在偏差的问题,无论在分页速度和效果上均取得了突破。同时, 本方法还解决了分页效果与打印机相关的问题,做到了完全的设备无关。效果图如下:关键字:关键字:RTF、Rich Text Format、分页、打印。一、一、背景介绍背景介绍RTF 文件的分页算法一致是困扰已久的话题,以前我的

2、方法是采用逐行计算行高然后再手工分页的方 法,该方法有很多不足之处:1、 正在计算的行必须在屏幕可视范围内; 2、 每行的左缩进位置必须为正数; 3、 逐行计算采用模拟键盘操作进行,速度很慢; 4、 手工计算存在一些误差; 5、 分页效果与打印机相关,导致不同打印机结果不一致。综上几点原因,旧的分页算法存在稳定性差和计算不精确等问题,因此分页结果常常出现偏差。寻找 一种稳定可靠、高效率的分页算法迫在眉睫。二、新的分页算法简介二、新的分页算法简介新的分页算法其核心采用以前我翻译的RichTextBox SDK 参考手册一文中介绍的方法:主要 方法是通过向 Rich Edit 控件发送 EM_FO

3、RMATRANGE 消息来将其输出重定向到指定设备,比如打印 机。当然,也可以指定一个用于 Rich Text 文本格式化的输出设备,比如图片框。同时,可以使用 EM_SETTARGETDEVICE 消息来指定一个用于 Rich Text 文本格式化的目标设备。该消息用于实现WYSIWYG(所见即所得)模式,即在该模式下应用程序采用默认打印机字体规格而非屏幕字体规格来定 位文本。这样就实现了 RTF 文本的 WYSIWYG(所见即所得)显示、打印预览与最终打印。需要说明的是,如果要保持 3 种方法在结果上的一致性,那么采用的目标设备必须统一,这样才能保 证渲染结果的统一。我们采用屏幕 Scre

4、en 对象来作为目标设备,这样就实现了渲染结果与打印机无关, 避免了不同打印机其分页效果不同的问题。下面对这几个消息进行详细讲解:三、相关三、相关 Windows 消息和函数详解消息和函数详解EM_FORMATRANGE 消息EM_FORMATRANGE 消息用于为指定设备格式化一定范围的文本,用于 Rich Edit 控件。语法:语法:发送该消息,采用如下方法调用 SendMessage 函数:lResult = SendMessage( / 返回结果值 LRESULT(HWND) hWndControl, / 目标控件句柄(UINT) EM_FORMATRANGE, / 消息 ID (WP

5、ARAM) wParam, / = (WPARAM) () wParam;(LPARAM) lParam / = (LPARAM) () lParam; );参数:参数: wParam 表示是否渲染文本。如果该参数为非 0 值,文本将被渲染;否则,文本仅仅被测量(不做实际渲 染) 。 lParam 指向一个 FORMATRANGE 结构体,该结构体包含输出设备相关信息,或者为 NULL 用于释放 目标控件所绑定的信息。返回值:返回值:该消息返回适合该区域的最后一个字符位置,加 1。注释:注释:该消息通常与 EM_DISPLAYBAND 消息搭配,用于为输出设备诸如打印机等格式化 Rich Ed

6、it 控件中的 内容。非常重要的是,在你最后一次使用该消息后需要为 lParam 参数指定 NULL 值来释放所绑定的信息。另外, 一旦你在某个设备使用该消息后,如果需要在不同设备再使用该消息,同样你必须先释放所绑定的信息。消息信息:消息信息: 头文件头文件Richedit.h操作系统操作系统Windows 95, Windows NT 4.0参见:参见: Rich Edit Controls, EM_DISPLAYBAND, FORMATRANGEFORMATRANGE 结构体FORMATRANGE 结构体包含用于 Rich Edit 控件格式化其输出到指定设备的相关信息。该结构体用于EM_

7、FORMATRANGE 消息。语法:语法:typedef struct _formatrange HDC hdc;HDC hdcTarget;RECT rc;RECT rcPage;CHARRANGE chrg; FORMATRANGE;成员:成员:hdc渲染设备句柄。hdcTarget目标设备句柄。rc渲染区域,单位:缇。rcPage渲染设备的整体区域,单位:缇。chrgCHARRANGE 结构体,表示用于格式化的文本范围。结构体信息:结构体信息: 头文件头文件Richedit.h操作系统操作系统Windows 95, Windows NT 4.0参见:参见: Rich Edit Contr

8、ols, EM_FORMATRANGEEM_DISPLAYBAND 消息EM_DISPLAYBAND 消息用于显示 Rich Edit 控件的一部分内容,该文本采用前面EM_FORMATRANGE 消息所指定的设备来格式化。语法:语法:发送该消息,采用如下方法调用 SendMessage 函数lResult = SendMessage( / 返回结果值 LRESULT(HWND) hWndControl, / 目标控件句柄(UINT) EM_DISPLAYBAND, / 消息 ID (WPARAM) wParam, / = (WPARAM) () wParam;(LPARAM) lParam

9、/ = (LPARAM) () lParam; ); 参数:参数: wParam 该参数不使用;必须等于 0。 lParam 指向一个 RECT 结构体所表示的设备显示区域。返回值:返回值:如果操作成功,则返回 True;否则返回 False。注释:注释:文本及组件对象模型(COM)对象将被该矩形所裁剪。程序不需要设置裁剪区域。消息信息:消息信息: 头文件头文件Richedit.h操作系统操作系统 Windows 95, Windows NT 4.0参见:参见: Rich Edit Controls, EM_FORMATRANGE, RECTGetDeviceCaps函数GetDeviceCa

10、ps 函数用于获取指定设备的设备描述信息。 int GetDeviceCaps(HDC hdc, / DC 句柄int nIndex / 项目索引值);参数:参数:hdc in DC 句柄。nIndex in 指定需要返回的项目。可以取下面的值: 索引索引涵义涵义 DRIVERVERSION设备驱动程序版本。 TECHNOLOGY设备工艺。取值可以为:DT_PLOTTER矢量绘图仪DT_RASDISPLAY光栅显示器DT_RASPRINTER光栅打印机DT_RASCAMERA光栅照相机DT_CHARSTREAM字符流DT_METAFILE图元文件DT_DISPFILE显示文件如果 hdc 参数

11、指向一个增强图元文件的 DC 句柄,设备工艺将 参照 CreateEnhMetaFile 函数所指定的设备。确定是否是增 强图元文件的 DC,可以使用 GetObjectType 函数。 HORZSIZE物理屏幕宽度,单位:毫米。 VERTSIZE物理屏幕高度,单位:毫米。 HORZRES屏幕宽度,单位:象素(pixels) 。 VERTRES屏幕高度,单位:(光栅)行。 LOGPIXELSX沿屏幕宽度的每个逻辑英寸的象素值。在多显示器系统中,所有 显示器的这个值均相同。 LOGPIXELSY沿屏幕高度的每个逻辑英寸的象素值。在多显示器系统中,所有 显示器的这个值均相同。BITSPIXEL每个

12、象素点的相邻颜色位数。 PLANES颜色平面数。 NUMBRUSHES设备相关画刷(BRUSH)数目。 NUMPENS设备相关画笔(PEN)数目。 NUMFONTS设备相关字体数目。 NUMCOLORS设备颜色表的入口总数,如果设备的颜色深度小于每象素 8 位 时可用。大于该色深时,返回-1。 ASPECTX绘制线条时的相对象素宽度。 ASPECTY绘制线条时的相对象素高度。 ASPECTXY绘制线条时的相对对角线象素宽度。 PDEVICESIZE保留。 CLIPCAPS设备剪切性能标志,如果设备可以剪切为矩形,返回 1;否则为 0。 SIZEPALETTE设备调色板的入口总数。该索引值只能在

13、设备驱动在 RASTERCAPS 等于 RC_PALETTE 位并且在兼容 16 位 Windows 时才可用。 NUMRESERVED系统调色板的保留入口总数。该索引值只能在设备驱动在 RASTERCAPS 等于 RC_PALETTE 位并且在兼容 16 位 Windows 时才可用。 COLORRES设备的实际颜色分辨率,单位:BPP(位/象素) 。该索引值只能 在设备驱动在 RASTERCAPS 等于 RC_PALETTE 位并且在兼容 16 位 Windows 时才可用。 PHYSICALWIDTH对于打印设备而言,表示物理页宽,采用设备单位。例如,打印 机设为 600 dpi,8.5

14、-x11-英寸纸张,那么它的物理宽度值为 5100 设备单位。 注:物理页总是大于页面的可打印区域,不会小于它。 PHYSICALHEIGHT对于打印设备而言,表示物理页高,采用设备单位。例如,打印 机设为 600 dpi,8.5-x11-英寸纸张,那么它的物理高度值为 6600 设备单位。 注:物理页总是大于页面的可打印区域,不会小于它。 PHYSICALOFFSETX对于打印设备而言,表示从物理页的左边缘到可打印区域的左边 缘的距离,采用设备单位。例如,打印机设为 600 dpi,8.5- x11-英寸纸张,那么它不能在左边距大于 0.25 英寸的纸张上 打印,因为此时它的水平物理偏移量为

15、 150 个设备单位。 PHYSICALOFFSETY对于打印设备而言,表示从物理页的上边缘到可打印区域的上边 缘的距离,采用设备单位。例如,打印机设为 600 dpi,8.5- x11-英寸纸张,那么它不能在上边距大于 0.5 英寸的纸张上打 印,因为此时它的垂直物理偏移量为 300 个设备单位。 VREFRESHWindows NT/2000/XP:对显示设备而言,表示当前的垂 直刷新率,单位:Hz。垂直刷新率为 0 或者 1,表示采用显示硬件的默认刷新率。This default rate is typically set by switches on a display card or

16、 computer motherboard, or by a configuration program that does not use display functions such as ChangeDisplaySettings. SCALINGFACTORX打印机的 X轴缩放比例。 SCALINGFACTORY打印机的 Y轴缩放比例。 BLTALIGNMENTWindows NT/2000/XP: Preferred horizontal drawing alignment, expressed as a multiple of pixels. For best drawing performance, windows should be horizontally aligned to a multiple of this value. A valu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号