RichEdit对ole 对象的相关支持总结

2024-03-13 09:18

本文主要是介绍RichEdit对ole 对象的相关支持总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                                        

                                               RichEditole 的相关支持总结

1.       RichEdit要嵌入ole  objects必须要继承 IRichEditOleCallback 接口,这个接口让richEdit能够增加RichEditOle的嵌入支持。

 

  

首先在RichEditOnCreate中调用SetOLECallback函数,这样就设置了IRichEditOleCallback的接口实现者。

 

OnCreate中,还要记得注册 ole剪贴板格式,这个格式是我们自己定的,在处理复制和粘贴的时候,需要用到它。

 

       

 

这个接口的几个必须实现的接口函数:

(1) GetNewStorage

它为一个来自剪贴板粘贴的对象提供新的存储。

2QueryInsertObject

     它处理来自ole object的插入请求,如果同意插入,就返回S_OK,否则返回E_NOTIMPL

     在这个里面可以判断是否是自己需要的类型,如果不是,就可以拒绝插入。

 

 

3 DeleteObject

它处理删除ole  obj的请求,直接返回E_NOTIMPL即可。

 

 

 

4GetClipboardData

   在这个地方处理复制或拖拽

   创建一个 DataSource对象,将自己处理过的数据,存入ole 剪贴板,最好获得DataSource对象的 IDataObject接口,将它赋值给lpchrg参数。

 

5QueryAcceptData

      当有粘贴操作或者拖放操作的时候,询问是否应该接受这些操作。

      可以在这里处理粘贴和拖放,然后解析来自ole 剪贴板的数据,然后把他输出到richedit中。这些ole 剪贴板中的数据,是在GetClipboardData中写入的。

 

 

 

 

 

6GetContextMenu

      这个函数处理右键菜单。

 

 

 

 

 

1.   RichEdit中,怎么实现对复制的内容中,什么是普通文本,什么是ole对象的识别。

(1)  首先,创建一个Manager类,类里面有个vector,用来管理richedit中的 ole对象对应的结构体列表。

另外一个结构体OleStruct用来存储ole对象的相关的信息。

这些信息包括:ole对象在richedit中的位置nPos,这个很重要,因为在处理复制的时候,需要通过这个来判断,复制的是否是文字还是ole对象。

              Ole对象的Index,如果有的话

              Ole对象的 path,也就是插入到richedit的 图像的路径,这个是最重要的。

其他的一些信息。

 

Manager提供一个方法,这个方法传入一个位置nPos,如果这个位置是一个ole obj ,那么返回这个ole object对应的vector中的OleStruct对象,否则返回NULL.

在处理复制的时候,就调用这个方法,来将所有的ole obj的数据,替换为编码过的OleStruct对象的数据。然后在处理粘贴的时候,又解码,将对应的Ole object对象插入到

RichEdit中。

 

(2)  然后,响应richeditEN_CHANGE消息

注意在richEditOnCreate函数中启用EN_CHANGE消息,否则收不到这个消息:

           //设置让 EN_CHANGE  生效

  SetEventMask(GetEventMask() | ENM_CHANGE);

 

EN_CHANGE消息响应函数中:

首先获得整个richedit的内容,然后遍历内容,将所有的Ole objects 的信息都收集到 ole对象管理器中,这样就可以随时查询ole objects的相关信息了。

 

 

(3)  在处理复制和拖拽的时候,首先获得复制的内容,通过查询ole 对象管理器,可以知道对应的内容是否是ole obj对象。

将文本和ole 对象的数据分别用XML文档编码,编码为下面的两种类型:

 typedef   struct   _STR_OBJ_STRUCT

{

           string   strText; //文本内容

}STR_OBJ_STRUCT;

 

typedef   struct   _OLE_OBJ_STRUCT

{

          string   strOleFilePath; //路径

          int      iIndex;         //index

}OLE_OBJ_STRUCT;

 

然后再用XML插入这两种类型的结点,最终获得XML 的字符串。

通过ole剪贴板,将这个编码过的字符串保存起来。

 

4)在处理粘贴或拖放的时候:

        获得编码过的XML文本,然后解析XML文本,获得

        STR_OBJ_STRUCT结构体和OLE_OBJ_STRUCT结构体的对象。

 

        依次遍历这些对象,将他们插入到richedit中。这样就让richedit增加了对ole对象的复制粘贴和拖拽的支持。

 

 

这篇关于RichEdit对ole 对象的相关支持总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据