Richedit用以在界面上展示一段富文本内容,采用自主编写的排版引擎,不仅支持不同格式的文字混排,还可以插入任何元对象和控件。
下面介绍下如何在Richedit中操作对象。
l 插入对象:
1. 创建对象。
2. 设置对象大小(排版时需要此信息)。
3. 调用richedit的InsertObject插入对象。
l 复制/粘贴对象:
复制/粘贴需要用户响应richedit对象的两个事件,即OnGetObjectUniqueID和OnCreateObjectFromUniqueID。
string uniqueid, void* userdata, bool bHandled OnGetObjectUniqueID( RicheditObject self, LayoutObject obj )
复制操作中,遇到对象的时候,会触发OnGetObjectUniqueID事件,参数为当前需要复制的对象,用户可以通过对象句柄创建一个对象唯一id并且保存一个用户自定义数据块,而用户不用关心与剪贴板的交互工作。
LayoutObject obj, bool bHandled OnCreateObjectFromUniqueID( RicheditObject self, string uniqueid, void* userdata )
粘贴操作时,当发现当前粘贴的是一个对象,会触发OnCreateObjectFromUniqueID事件,通知用户根据GetObjectUniqueID生成的id与userdata生成一个对象,用户需要设置生成的对象的大小(对象大小的数据可以在OnGetObjectUniqueID事件里保存在userdata中),richedit会将创建好的对象插入到内容之中。
关于复制/粘贴与插入对象的例子,可以参考sdk中的wizzard例程中的富文本。
l 枚举当前Richedit中的对象:
可以通过BeginEnumObject与GetNextObject配合使用枚举当前richedit中的插入的所有对象,若枚举过程中发生输入和删除操作,不保证枚举结果的正确性。