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

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

作者:BlogUpdater |  时间:2023-12-05 |  浏览:130 |  评论已关闭 条评论

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

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

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

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

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

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

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

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

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

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

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

总结

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

最后

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

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

评论已关闭。