欢迎来到天天文库
浏览记录
ID:36409612
大小:244.50 KB
页数:12页
时间:2019-05-10
《RTF技术扩展如何实现完美分页打印》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、RTF技术扩展-如何实现完美的分页打印摘要:本文给出了一种完美实现RTF文件分页打印的方法,并根据此方法实现了RTF文件的打印预览及打印。通过本方法实现的RTF文件的WYSIWYG(所见即所得)显示、分页预览及分页打印三者在效果上完全一致,解决了以前预览与打印存在偏差的问题,无论在分页速度和效果上均取得了突破。同时,本方法还解决了分页效果与打印机相关的问题,做到了完全的设备无关。效果图如下:关键字:RTF、RichTextFormat、分页、打印。一、背景介绍RTF文件的分页算法一致是困扰已久的话题,以前我的方法是采用逐行计算行高然后再手工分页的方法,该方法有很多不足之处:1、正在计算的行必
2、须在屏幕可视范围内;2、每行的左缩进位置必须为正数;3、逐行计算采用模拟键盘操作进行,速度很慢;4、手工计算存在一些误差;5、分页效果与打印机相关,导致不同打印机结果不一致。综上几点原因,旧的分页算法存在稳定性差和计算不精确等问题,因此分页结果常常出现偏差。寻找一种稳定可靠、高效率的分页算法迫在眉睫。二、新的分页算法简介新的分页算法其核心采用以前我翻译的《RichTextBoxSDK参考手册》一文中介绍的方法:主要方法是通过向RichEdit控件发送EM_FORMATRANGE消息来将其输出重定向到指定设备,比如打印机。当然,也可以指定一个用于RichText文本格式化的输出设备,比如图片框
3、。同时,可以使用EM_SETTARGETDEVICE消息来指定一个用于RichText文本格式化的目标设备。该消息用于实现WYSIWYG(所见即所得)模式,即在该模式下应用程序采用默认打印机字体规格而非屏幕字体规格来定位文本。这样就实现了RTF文本的WYSIWYG(所见即所得)显示、打印预览与最终打印。需要说明的是,如果要保持3种方法在结果上的一致性,那么采用的目标设备必须统一,这样才能保证渲染结果的统一。我们采用屏幕Screen对象来作为目标设备,这样就实现了渲染结果与打印机无关,避免了不同打印机其分页效果不同的问题。下面对这几个消息进行详细讲解:三、相关Windows消息和函数详解®EM
4、_FORMATRANGE消息EM_FORMATRANGE消息用于为指定设备格式化一定范围的文本,用于RichEdit控件。语法:发送该消息,采用如下方法调用SendMessage函数:lResult = SendMessage( // 返回结果值 LRESULT (HWND)hWndControl, //目标控件句柄 (UINT)EM_FORMATRANGE, //消息ID (WPARAM) wParam, // = (WPARAM) () wParam; (LPARAM) lParam // = (LPARAM) () lParam;);参数:
5、wParam表示是否渲染文本。如果该参数为非0值,文本将被渲染;否则,文本仅仅被测量(不做实际渲染)。lParam指向一个FORMATRANGE结构体,该结构体包含输出设备相关信息,或者为NULL用于释放目标控件所绑定的信息。返回值:该消息返回适合该区域的最后一个字符位置,加1。注释:该消息通常与EM_DISPLAYBAND消息搭配,用于为输出设备诸如打印机等格式化RichEdit控件中的内容。非常重要的是,在你最后一次使用该消息后需要为lParam参数指定NULL值来释放所绑定的信息。另外,一旦你在某个设备使用该消息后,如果需要在不同设备再使用该消息,同样你必须先释放所绑定的信息。消息信息
6、:头文件Richedit.h操作系统Windows 95,WindowsNT 4.0参见:RichEditControls,EM_DISPLAYBAND,FORMATRANGE®FORMATRANGE结构体FORMATRANGE结构体包含用于RichEdit控件格式化其输出到指定设备的相关信息。该结构体用于EM_FORMATRANGE消息。语法:typedefstruct_formatrange {HDC hdc;HDC hdcTarget;RECT rc;RECT rcPage;CHARRANGE chrg;}FORMATRANGE;成员:hdc渲染设备句柄。hdcTarget目标设备句柄
7、。rc渲染区域,单位:缇。rcPage渲染设备的整体区域,单位:缇。chrgCHARRANGE结构体,表示用于格式化的文本范围。结构体信息:头文件Richedit.h操作系统Windows 95,WindowsNT 4.0参见:RichEditControls,EM_FORMATRANGE®EM_DISPLAYBAND消息EM_DISPLAYBAND消息用于显示RichEdit控件的一部分内容,该文本采用前面
此文档下载收益归作者所有