CRichEditCtrl 的ole技术

------------ IRichEditOle ---------------------------

如需向CRichEditCtrl里面插入Ole对象,

需要调用GetIRichEditOle 获得此CRichEditCtrl的IRichEditOle接口

如果不使用MFC则调用windows SDK 的 SendMessage 发送EM_GETOLEINTERFACE消息能获得同样的效果。

IRichEditOle接口是特别设计用于访问CRichEditCtrl object 的 OLE 功能,执行ole相干的操作。

接口下面几个重要的方法

InsertObject:插入一个对象到CRichEditCtrl

GetObject:返回一个CRichEditCtrl里面的REOBJECT对象

ImportDataObject: 导入一个剪切板对象并替换当前选中内容

GetClientSite:返回IOleClientSite接口用于创建新的对象。

GetClipboardData:返回一个Clipboard对象。

------------ IOleClientSite ---------------------------

如果需要往ole容器内嵌入一个嵌入对象(embedded object )则可以利用这个接口获取嵌入对象在容器内的定位信息,和嵌入对象的别名(moniker),显示的范围,

和用户界面以及容器提供的其他信息。被嵌入的对象必须通过调用IOleClientSite来获得

容器所提供的服务。容器会对每个它包含的复合文档(compound-document)提供一个IOleClientSite实例.

IOleClientSite接口提过如下比较常用的借口:

SaveObject:当用户更新或退出时,嵌入对象通过此方法请求容器把嵌入对象保存到persistent storage,此调用是同步的。

GetMoniker:请求对象的moniker.容器用此Moniker来维持与object的联系。

GetContainer:返回一个指向对象的容器的指针,利用这个指针可以遍历容器里的所有object。

ShowObject:请求容器显示对象。

OnShowWindow:通知容器当对象变的可见或不可见。

RequestNewObjectLayout:请求容器改变对象显示的位置。

------------ REOBJECT ---------------------------

上面提及的object我们可以用REOBJECT来进行描述,具体定义如下:

REOBJECT结构体包含一个对象的下列信息:

cbStruct  - Structure size, in bytes.

cp        - Character position of the object.

clsid     - 对象的类标示符.

poleobj   - 指向IOleObject interface的实例的指针.

pstg  - 指向IStorage interface的实例的指针. This is the storage object associated with the object.

polesite  - 指向IOleClientSite interface的实例的指针. This is the object's client site in the rich edit control. 这个值必须通过IRichEditOle::GetClientSite方法来获得.

sizel  - A SIZEL structure specifying the size of the object. A 0, 0 on insertion indicates that an object is free to determine its size until the modify flag is turned off.

dvaspect  - 显示方面的使用. See DVASPECT for an explanation of possible values.

dwFlags   - 标示是否对象是打开状态,是是允许改变大小,是否当前是选中状态.

dwUser    - 为用户保留的用于定义用户自己的数据.

------------ IOleObject ---------------------------

在REOBJECT里忙有个指向IOleObject的指针poleobj,下面来分析

其实IOleObject接口定义了一系列的方法,这些方法允许数据传输,和数据更改通知,这些用于数据传输的方法利用 STGMEDIUM 来指定数据格式FORMATETC。这些数据可以提供给特定的目标设备(target device),

IOleObject还管理所有的与对象的连接用于通知数据的改变。

以上提及的“容器”指的就是CRichEditCtrl控件。

StgCreateDocfileOnILockBytes复合文档的更多相关文章

  1. Atitit.复合文档的格式 标准化格式

    Atitit.复合文档的格式 标准化格式 1. Docfile1 2. Iso   Cdf  cd file1 3. Zip1 4. Ooxml1 5. Odf  :OpenDocument Form ...

  2. 复合文档的二进制存储格式研究[ole存储结构](word,xls,ppt...)[转]

    复合文档文件格式研究   前 言 复合文档(Compound Document) 是一种不仅包含文本而且包括图形.电子表格数据.声音.视频图象以及其它信息的文档.可以把复合文档想象成一个所有者,它装着 ...

  3. 复合文档(Compound Document)读写栗子

    复合文件是把磁盘文件系统的管理方式移植到文件中---复合文件. 复合文档是由 Windows 系统通过 COM 提供的, 它能完成像 Windows 目录结构一样复杂的文件结构的存取:提示一下 Win ...

  4. VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)

    VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 http://www.jizhuomi.com/software/141.html   上一讲中讲了VS20 ...

  5. ActiveX、OLE和COM的关系(转自百度文档)

    比较流行的组件模型有COM(Component Object Model,对象组件模型)/DCOM(Distributed COM,分布式对象组件模型)和CORBA(Common Object Req ...

  6. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

  7. HSSF与XSSF导出excel文档

    Apache POI Apache POI 是用Java编写的免费开源的跨平台的 Java API,它可以创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文 ...

  8. VBA Dumper v0.1.4.2, 提取office文档中的VBA代码,监查宏病毒恢复代码(演示版

    http://club.excelhome.net/thread-970051-1-1.html VBA Dumper 0.1.4.2更新,填补国内同类程序空白 此程序为演示版,可以在无office的 ...

  9. MFC用串行化实现文档存储和读取功能

    在面向对象的程序设计中,一般都是用二进制文件来保存文档资料.在VC++中控制和使用文件流的方法很多,MFC程序设计中常用的有两种方法:用CFile对象存储和读取文件:利用串行化存取文件.其中用CFil ...

随机推荐

  1. 【情人节来一发】网站添加QQ客服功能

    今年的元宵节遇到情人节,挺不自量力的,呵呵,开篇给各位讲个段子,早上一美女同学在空间发说说道:“开工大吉 起床啦,卖元宵,卖玫瑰,卖避孕套啦-有木有一起去发财的小伙伴?Let’s go…”,对于此种长 ...

  2. swfupload 例子

    upload.html <!DOCTYPE html> <html lang="en"> <head> <script type='tex ...

  3. 我所理解的OOP——UML六种关系

    最近由于经常给公司的小伙伴儿们讲一些OOP的基本东西,每次草纸都被我弄的很尴尬,画来画去自己都乱了,有时候也会尝试使用UML表示类之间的关系,但UML从毕业后就再也没接触过了,经常会被小伙伴儿们指出继 ...

  4. WPF路线图白皮书: 2015及未来

    介绍 当2006年微软首次推出Windows Presentation Foundation(WPF)时,它代表了应用程序的设计和开发又向前跨出了巨大的一步.它简化了GUI应用程序的开发,有助于UI和 ...

  5. GAMIT 10.50在Ubuntu 12.04系统下的安装

    转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0225/162.html?1456480908 摘要:GAMIT/GLOBK是一套安装于Unix/L ...

  6. Asp.net WebApi 项目示例(增删改查)

    1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...

  7. transform:rotate()将元素进行不同角度的旋转

    通过设置transform:rotate()可以将元素进行不同角度的旋转: 下面是一些测试代码: <!DOCTYPE html> <html> <head> < ...

  8. EasyUI Datagrid Datetime(EasyUI DataGrid 时间格式化)

    EasyUI DataGrid 时间格式化 方法一: var Common = { //EasyUI用DataGrid用日期格式化 TimeFormatter: function (value, re ...

  9. NET中Application,Session,Cookie,ViewState,Cache,Hidden 缓存机制 .

    Application 1.         Application用来保存所有用户共用的信息 2.         在Asp时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Ap ...

  10. IDE:Eclipse查看Servlet源码

    一.源码下载 1.打开tomcat官网:http://tomcat.apache.org/    , 点击右侧下载菜单(以tomcat-7为例)进入下载页面:http://tomcat.apache. ...