如何将整个文件内容加载到富文本控件?

众所周知,富文本控件,Rich Text Control,用来呈现文本内容的一个控件,功能上相对记事本来说更加丰富,但又不及 Word。

但,我们的目标又不是开发另外一个 Word。

我们可以使用 EM_STREAMIN 消息将整个文件加载到富文本控件,此消息接受一个 IStream 的数据源,并一次性地将整个文件的内容加载的控件上。听起来,是不是还不错?

如果你 MSDN 上阅读了关于 EM_STREAMIN 的更多信息,则可以很容易地理解它的基本用法,我们来看看下面的例子。

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

上面的代码,你可以先自行体会一下。

EM_STREAMIN 消息希望告知它流的格式 (SF_RTF) 并提供指向控制输入的 EDITSTREAM 结构的指针。由于我们要从文件中读取,因此我们打开一个文件进行读取,并将其用作 EditStreamCallback 的 dwCookie。唯一棘手的部分是获取回调的正确返回值。出于某种原因,富文本控件希望在成功时为零,在失败时为非零,因此我们需要相应地翻转 ReadFile 返回值的意义。除此之外,没有什么其他高深的东西。

“但是我试过了这个,只有文件的第一行被读入。我做错了什么?”

啊,一个典型的菜鸟错误。在创建富文本控件时,你可能忘记设置ES_MULTILINE样式。
别担心,我也犯了这个错误。

“如果我的数据不是文件,该怎么办?”

只要可以编写生成接下来几个字节数据的函数,就可以将其流式传输到富文本控件中。例如,下面是一个将任意 IStream 加载到丰富的编辑控件中的版本:

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

在上面的代码中,仍然存在一个Bug,并且它不是我们所期望的。你发现了吗?

总结

这个小技巧,值得记录,因为载入文件到富文本控件这个需求,几乎总是时不时的冒出来,以后有这个需求了,直接看此文即可知道如何下手了。

最后

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

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

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

相关文章

ubuntu安装tomcat并配置前端项目

1.1查找 # 先更新 sudo apt update # 查找 apt search jdk1.2安装 sudo apt install openjdk-8-jdk1.3验证 java -version 2.安装tomcat 下载链接&#xff1a;Apache Tomcat - Apache Tomcat 8 Software Downloadshttps://tomcat.apache.org/download-80.cgi下载这个&…

LeetCode [中等]最大子数组和-动态规划

53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 贪心算法&#xff1a;若当前指针所指元素之前的和小于0&#xff0c;则丢弃当前元素之前的数列 动态规划&#xff1a;若下一个元素大于0&#xff0c;则将其加到当前元素上 思路&#xff1a; n 为数组长度&#xff…

vue+electron问题汇总

1. Vue_Bug Failed to fetch extension, trying 4 more times 描述&#xff1a;项目启动时报错 解决&#xff1a;注释图片中内容 2. Module not found: Error: Can’t resolve ‘fs’ in 描述&#xff1a;项目启动报错 解决&#xff1a;vue.config.js中添加图中数据 3.导入…

PTA 7-231 买文具

某小学要购置文具。批发市场中 A 牌的铅笔卖 5 元一支&#xff0c;C 牌的铅笔卖 2 元一支&#xff0c;D 牌的简易铅笔卖1元2只&#xff08;捆绑销售&#xff0c;只能买偶数只&#xff09;。 如果想用n元买n支笔&#xff0c;问有多少种买法&#xff1f;&#xff08;题目保证 n …

【单片机】单片机裸机实现多任务调度

RTOS vs 裸机多任务调度 实时操作系统RTOS的优点不必多说了&#xff0c;但是对于一些简单的业务需求&#xff0c;移植一个操作系统显得非常麻烦&#xff0c;并且占用系统资源&#xff0c;此时就可以考虑利用SysTick裸机实现多任务调度。 单片机裸机实现多任务调度的优点有 1、…

Vue2虚拟列表,umy-ui封装

一、起因 1、需求&#xff1a; 由于业务需求在页面一次性展示较多数据&#xff0c;不低于上千&#xff0c;但是每条数据涉及样式较多&#xff0c;数据渲染过多就会导致页面卡顿 2、满足&#xff1a; 大量数据加载&#xff1b;表格功能&#xff1a;列显隐、列顺序调整、固定、筛…

基于Java SSM框架实现汽车在线销售系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现汽车在线销售系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&a…

3.2.1.0 发布!时间转换函数+BI 集成+视图正式上线!

自 3.0 版本发布以来&#xff0c;经过研发人员和社区用户的不断努力&#xff0c;TDengine 进行了大量更新&#xff0c;产品稳定性和易用性也在不断提升。近日&#xff0c;TDengine 3.2.1.0 成功发布&#xff0c;该版本带来了一些重大功能优化&#xff0c;这些优化将进一步提升 …

spark sql基于CBO的优化

前言 spark sql基于CBO的优化是建立在物理计划层面的&#xff0c;原理是计算出所有可能的物理执行计划&#xff0c;并挑选成代价最小的物理执行计划。对于执行计划可以去看我的另一篇博客RBO优化 CBO的话主要用来调整inner join所涉及表的顺序 使用CBO准备 搜集所需表和列的…

Leetcode每日一题学习训练——Python3版(从二叉搜索树到更大和树)

版本说明 当前版本号[20231204]。 版本修改说明20231204初版 目录 文章目录 版本说明目录从二叉搜索树到更大和树理解题目代码思路参考代码 原题可以点击此 1038. 从二叉搜索树到更大和树 前去练习。 从二叉搜索树到更大和树 给定一个二叉搜索树 root (BST)&#xff0c;请…

VUE2+THREE.JS 按照行动轨迹移动人物模型并相机视角跟随人物

按照行动轨迹移动人物模型并相机视角跟随人物 1. 初始化加载模型2. 开始移动模型3. 人物模型启动4. 暂停模型移动5. 重置模型位置6. 切换区域动画7. 摄像机追踪模型8. 移动模型位置9.动画执行 人物按照上一篇博客所设定的关键点位置&#xff0c;匀速移动 1. 初始化加载模型 //…

我的计算机专业之旅:激情、挑战与无尽可能性

标题&#xff1a;我的计算机专业之旅&#xff1a;激情、挑战与无尽可能性 引言&#xff1a; 回顾过去的三年&#xff0c;我深深感受到计算机专业给我带来的激情、挑战以及无尽的可能性。作为一名大三的计算机专业学生&#xff0c;我想分享一下当初选择这条专业之路的初衷和心…

短信验证码轰炸解决方案二(防止海外ip、限制ip、限制手机号次数解决)

1. 检查IP是否在黑名单中&#xff0c;如果是则终止访问。 2. 检查手机号是否在黑名单中&#xff0c;如果是则终止访问。 3. 对于同一个IP&#xff0c;限制访问次数&#xff0c;如果超过限制则终止访问。 4. 对于同一个手机号&#xff0c;限制访问次数&#xff0c;如果超过限制则…

〖大前端 - 基础入门三大核心之JS篇㊸〗- DOM事件对象的方法

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

高铁乘务员简历12篇

想要在高铁乘务员职位的求职中脱颖而出&#xff0c;顺利进入心仪的高铁乘务员岗位&#xff0c;以下是12篇专业的高铁乘务员个人简历案例&#xff0c;无论您是初入行业的新手还是有一定工作经验的乘务员参考这些简历&#xff0c;让您的求职之路更加顺畅。 高铁乘务员简历模板下…

3D Gaussian Splatting的使用

3D Gaussian Splatting的使用 1 下载与安装2 准备场景样本2.1 准备场景照片2.1.1 采集图片2.1.2 生成相机位姿 3 训练4 展示 1 下载与安装 今年SIGGRAPH最佳论文&#xff0c;学习了一下&#xff0c;果然厉害&#xff0c;具体论文原理就不说了&#xff0c;一搜都有&#xff0c;…

2023年12月5日历史上的今天大事件早读

1377年12月05日明朝第二位皇帝明惠帝朱允炆出生 1408年12月05日金帐汗国军队在亦敌忽率领下进抵莫斯科城下 1492年12月05日欧洲航海家哥伦布第一次踏上伊斯帕尼奥拉岛 1791年12月05日音乐神童莫扎特逝世 1847年12月05日广州黄竹岐人民抗英 1870年12月05日法国著名作家大仲…

第N个泰波那锲数

1.题目解析 动态规划算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 为了填写当前状态的时候&#xff0c;所需要的状态已经计算过了&#xff01;&#xff01;&#xff01; 5.返回值 题目要求 状态表示 ------------------------------------------------------…

vant4 van-tabs和van-popup一起使用样式错误

问题现象&#xff1a;van-cell的宽度被撑出屏幕宽度 今天做一个tab切换页面&#xff0c;偶然发现这个问题&#xff0c;记录一下。 问题背景&#xff1a; 前提是已经定了框架vue3vant4 那么做tab页面首先是用到了van-tabs&#xff0c;然后很自然的给它加了animated属性&#xff…

Cannot read properties of null (reading ‘setAttribute‘)

做项目时候&#xff0c;总是报这个错&#xff0c;参考如下链接解决问题&#xff0c;在此记录下&#xff0c;防止忘记。 报错 Uncaught TypeError: Cannot read properties of null (reading ‘setAttribute‘)_三水木雨的博客-CSDN博客