如何将整个文件内容加载到富文本控件?
众所周知,富文本控件,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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
相关推荐
- 实战经验:CentOS环境下搭建boost开发环境
- Posted on 04月17日
- 安全编程:初始化那些你忽略掉的东西
- Posted on 09月05日
- 如果调用约定不匹配,会发生什么?
- Posted on 10月17日
- 谨慎行事,请编写面向阅读的代码
- Posted on 02月22日
评论已关闭。