如何打印富文本控件中的内容?

出于某种原因,人们确实对打印富文本控件中的内容感到困惑。
我并非打印方面的专家,但是经过对资料的研究的,我也算弄明白了,今天在此记录一下。

解决问题的关键是这个消息:EM_FORMATRANGE。
每次发送这个消息的时候,控件的内容会打印一些,然后消息会返回尚未打印的文本的首个字符的索引,然后可以依据这个索引继续传递给它,并打印下一块文本内容。
剩下的工作就是简单的设置工作和资源的销毁了。

>> 请移步至 www.topomel.com 以查看图片 <<

我们首先获取页面的尺寸,并使用 EM_SETTARGETDEVICE 消息告诉富文本控件我们打算呈现的内容。接下来,我们需要填写 FORMATRANGE 结构体,为此,我们指定要渲染到的 HDC 以及纸张尺寸。但是字符范围呢?

我们很懒惰,让富文本控件为我们处理它:我们选择所有文本,然后让富文本控件告诉我们刚刚选择的内容,它以 CHARRANGE 的形式返回,这正是我们所需要的。

接下来是打印循环。虽然仍有文本要打印(并且我们没有遇到错误),但我们开始一个新页面,要求富文本控件呈现该页面,记住下一页应该从哪里开始,然后结束当前页面。

请注意,代码中会执行一段检查,以确保富文本控件向前推进。如果没有,那么我们最终会陷入无限循环,打印出空白页!(我不知道这在理论上是否可行,但我同样会防止它。)

打印循环完成后,我们通过发送最后一条 EM_FORMATRANGE 消息来告知富文本控件我们已完成,并且可以丢弃它缓存的信息。

我们可以利用过去几天学到的所有信息来制作一个简单的“打印 RTF”程序。

>> 请移步至 www.topomel.com 以查看图片 <<

我们创建一个富文本控件,并用命令行上传递的文件填充它。然后,我们要求 PrintDlg 函数为我们提供用户默认打印机的 DC。我们给文档一个标题,启动文档,将富文本打印到文档中,然后结束文档(如果在打印过程中出现问题,则中止文档)。稍微清理一下,程序就结束运行了。
一个小小的程序,可以打印任意的RTF文档,没有任何特别难理解的地方。

总结

我有时候真的想将打印功能列为需求列表上最后一行,但是真实世界中,这一功能可能是某一类用户最希望使用的。
所以,还是尽力拥抱你最害怕的事情吧。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《How do I print the contents of a rich text control?》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/264712.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring日志完结篇,MyBatis操作数据库(入门)

目录 Spring可以对日志进行分目录打印 日志持久化&#xff08;让日志进行长期的保存&#xff09; MyBatis操作数据库(优秀的持久层框架) MyBatis的写法 开发规范&#xff1a; 单元测试的写法 传递参数 Spring可以对日志进行分目录打印 他的意思是说spring相关只打印INFO…

idea本地调试hadoop 遇到的几个问题

1.DEA对MapReduce的toString调用报错&#xff1a;Method threw ‘java.lang.IllegalStateException‘ exception. Cannot evaluate org.apache.hadoop.mapreduc 解决方法&#xff1a;关闭 IDEA 中的启用“ tostring() ”对象视图 2.代码和hdfs路径都对的情况下&#xff0c;程序…

vs2017+qt5.14.2遇到的问题

1、在安装qt插件后&#xff0c;导入pro文件时&#xff0c;报 msvc-version.conf loaded but QMAKE_MSC_VER isn’t set 修改E:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\msvc-version.conf文件中添加

令牌桶算法理解学习(限流算法)

令牌桶算法是网络流量整形&#xff08;Traffic Shaping&#xff09;和速率限制&#xff08;Rate Limiting&#xff09;中最常使用的一种算法。典型情况下&#xff0c;令牌桶算法用来控制发送到网络上的数据的数目&#xff0c;并允许突发数据的发送。 用简单的话语来说就是限制…

【媒体开发】利用FFMPEG进行推拉流

1. 下载并启动媒体服务 MediaMTX&#xff0c;也即之前的rtsp-simple-server&#xff0c;是一个即用型、零依赖的实时媒体服务器和媒体代理&#xff0c;允许发布、读取、代理和记录视频和音频流。 从Releases bluenviron/mediamtx GitHub找到最新版&#xff0c;下载对应平台…

FPGA高端项目:UltraScale GTH + SDI 视频解码,SDI转DP输出,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图3G-SDI摄像头LMH0384均衡EQUltraScale GTH 的SDI模式应用UltraScale GTH 基本结构参考时钟的选择和分配UltraScale GTH 发送和接收处理流程UltraScale…

Windows汇编调用printf

VS2022 汇编 项目右键 生成依赖项 生成自定义 勾选masm 链接器 高级 入口点 main X86 .686 .model flat,stdcall option casemap:none includelib ucrt.lib includelib legacy_stdio_definitions.libEXTERN printf:proc.data szFormat db %s,0 szStr db hello,0.code main…

[LeetCode周赛复盘] 第 375 场周赛20231210

[LeetCode周赛复盘] 第 375 场周赛20231210 一、本周周赛总结100143. 统计已测试设备1. 题目描述2. 思路分析3. 代码实现 100155. 双模幂运算1. 题目描述2. 思路分析3. 代码实现 100137. 统计最大元素出现至少 K 次的子数组1. 题目描述2. 思路分析3. 代码实现 100136. 统计好分…

仿交易猫转转闲鱼链接三合一源码+独立后台生成链接

高仿交易猫转转闲鱼源码 搭建教程:添加网站→上传源码→解压源码→导入数据库→修改数据库路径config/Conn.php 不用设置什么伪静态 不会可以看源码里有教程 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

Nacos源码解读12——Nacos中长连接的实现

短连接 VS 长连接 什么是短连接 客户端和服务器每进行一次HTTP操作&#xff0c;就建立一次连接&#xff0c;任务结束就中断连接。 长连接 客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭&#xff0c;客户端再次访问这个服务器时&#xff0c;会继续使用这一条已经建立…

成都工业学院Web技术基础(WEB)实验六:ECMAScript基础语法

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考&#xff0c;前端变化比较大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一样 3、图片和文字仅为示例&#xff0c;需要自行替换 4、如果代码不满足你的要求&#xff0c;请寻求其他的…

【sgAutocomplete】自定义组件:基于elementUI的el-autocomplete组件开发的自动补全下拉框组件(带输入建议的自动补全输入框)

特性&#xff1a; 1、支持本地保存选中过的记录 2、支持动态接口获取匹配下拉框内容 3、可以指定对应的显示label和字段组件key 4、自动生成速记符字段&#xff08;包含声母和全拼两种类型&#xff09;&#xff0c;增强搜索匹配效率 sgAutocomplete源码 <template><!…