文档视图结构中利用序列化机制使用OLE剪贴板

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

文档视图结构中利用序列化机制使用OLE剪贴板

FMD(http://www.fmdstudio.net)

文档视图结构中利用序列化机制使用OLE剪贴板

一、序列化支持

从CObject派生对象通过在类声明和实现部分添加特定的宏语句添加序列化支持

DECLARE_SERIAL(CSomeObject)

IMPLEMENT_SERIAL(CSomeObject,CSomeBase, 1 )

重载serialize成员函数,书写对象的存储和读取过程。

二 对象的OLE复制

 //建立内存文件
 CSharedFile file;
 //建立用于写入的文档对象
 CArchive ar(&file, CArchive::store);
  
 //针对ar,对用对象的序列化函数
 somobjects.Serialize(ar);
 ar.Close();
 COleDataSource* pDataSource = NULL;
 TRY
 {
  //建立OLE数据源
  pDataSource = new COleDataSource;
  //将内存文件指定给数据源
  pDataSource-> CacheGlobalData(m_cfDraw, file.Detach());
  //设置剪贴板
  pDataSource-> SetClipboard();
 }
 CATCH_ALL(e)
 {
  delete pDataSource;
  THROW_LAST();
 }
 END_CATCH_ALL

三、对象的OLE粘贴

 //建立OLE数据对象
 COleDataObject dataObject;
 //连接剪贴板
 dataObject.AttachClipboard();
 if (dataObject.IsDataAvailable(m_cfDraw))  //判断指定的格式是否存在
 {
  //得到内存文件指针
  CFile* pFile = dataObject.GetFileData(m_cfDraw);
  if (pFile != NULL)
  {
   //建立用于读取的文档对象
   CArchive ar(pFile, CArchive::load);
   TRY
   {
    //针对ar,调用对象的序列化函数。
    graphylist.Serialize(ar);
   }
   CATCH_ALL(e)
   {
    ar.Close();
    delete pFile;
    THROW_LAST();
   }
   END_CATCH_ALL
   ar.Close();
   delete pFile;
  }
 }

四、关于格式

在使用OLE剪贴板时,需要注册自己的格式

在合适的地方声明并定义一个静态结构(以下以文档CGraphDrawDoc中为例)

static CLIPFORMAT m_cfDraw;

CLIPFORMAT CGraphDrawDoc::m_cfDraw=NULL;

//在程序序初始化时,注册格式

CGraphDrawDoc::m_cfDraw= (CLIPFORMAT)RegisterClipboardFormat(_T("FMD GraphDraw"));

 

MFC文档视图结构学习笔记 文档/视图概述 为了统一和简化数据处理方法,Microsoft公司在MFC中提出了文档/视图结构的概念,其产品Word就是典型的文档/视图结构应用程序 MFC通过其文档类和视图类提供了大量有关数据处理的方法 分为数据的管理和显示,文档用于管理和维护数据,视图用来显示和编辑数据 什么是文档 文档的概念在MFC应用程序中的适用范围很广,一般说来,文档是能够被逻辑地组合的一系列数据,包括 阅读详情

相关推荐

OLE应用小记

 若应用程序要支持OLE功能和特性,其文档类需要继承自COleServerDoc.在OLE的应用中有如下三个名词:OLE条目  插入到服务器中的一个OLE对象,有时简称为条目包容器  可以装在OLE对象的应用程序服务器  提供条目的程序为服务器OLE的应用可以分为:包容器和服务器。当在一应用程序中嵌入其他应用程序,如画笔时,那么该应用程序就充当包容器的角色;当其他应用程序,如Word,嵌入

feijj2002_的专栏 2903

第三部分:IDataObject实现

第二部分我们介绍了OLE数据传输的相关知识,这一节主要讲怎么实现一个IDataObject接口。然后再给出一个例子。 首先我们要明白,IDataObject是一个COM接口,我们就必须得创建一个类,实现这个接口的每一个方法,包括它的基类的方法。 1. SdkDataObject.h 头文件:  #ifdef __cplusplus #ifndef _SDKDATAOBJECT_H

永远即等待的专栏 9997

MFC复合文档编程:深入掌握COleDocument类的用法

本文详细介绍了MFC框架中COleDocument类的实现与应用。作为支持OLE(对象链接与嵌入)功能的文档基类,COleDocument能够创建复合文档并管理嵌入或链接的对象。文章从类概述、容器应用程序创建、OLE项管理、视图类实现到高级功能(如拖放支持和服务器功能)进行了系统讲解,提供了完整的代码示例和实现方法。重点阐述了如何初始化OLE环境、处理文档序列化、管理OLE项生命周期以及实现用户交互功能,为开发具有Office-like功能的应用程序提供了实用指南。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 292

C++简单文档视图结构序列化

C++简单文档视图结构序列化,针对很多东西进行了解析,相当好的东西,值得参考!希望对你有用!

OLe复合文档介绍

/////////////////////////////////////////////////结构存储OLE对象///////////////////////////////////////////////// 1 引言 目前,传统的二层C/S(Client/Server)结构应用软件已发展为多层结构的分布式应用 系统[2]。为了改善系统的工作效率以及提高系统的伸缩性,很多软件开发人

让软件普及到企业中去而奋斗终生 3443

第一部分:OLE Drag&Drop 介绍

1.基本概念     拖放,是指用鼠标拖动的方法,在不同程序的窗口之间、同一程序的不同窗口之间或同一程序同一窗体的不同控件之间,进行移动、复制、粘贴数据等操作的技术。拖放操作是依靠操作系统来完成的,被拖动的对象首先向操作系统注册一种它所使用数据的格式,并且按照这种格式来提供数据,拖放结束时,目标窗口提取出数据,并根据提取的数据生成相应的对象。     拖放方式有两种,一种是OLE拖放(

永远即等待的专栏 4652

•网络扫描器的设计与实现-(2013/09/18)

了解cobject 和 cruntimeclass-(2013/09/18) 网络扫描器的设计与实现-(2013/09/18) csplitterwnd extension that allows switching views in any pane-(2013/09/18) using internet sockets-(2013/09/18) vc++中mfc窗口对象的清除-(201

q1q2q3q4ln的专栏-随我一起研究程序 907

剪贴板OLE拖放

一、传统剪贴板      传统剪贴板的形式非常的简单,其基本思路是当复制时程序复制一个数据副本给全局内存对象,打开剪贴板并且清空剪贴板当中的数据,将全局内存对象复制给剪贴板最后关闭剪贴板;从剪贴板中获取数据的顺序是打开剪贴板获取全局内存对象,锁定全局内存对象后从中复制数据,解锁内存对象并且关闭剪贴板。需要注意的是剪贴板在某个时刻只能被一个程序所打开,如果试图打开一个已经被其他程序打...

567

【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容

【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容 本文将示范如果通过OLE方式从剪贴板上获取数据,如果该数据是文本内容,则打印该文本内容。

MoreWindows Blog 3万+

自定义剪贴板

视图类中为文档创建一个新的剪切板类型。拥有这种剪贴板类型的文档可以粘贴到该剪贴板,但其他类型的文档不行。创建自己的自定义格式,要遵循在注册任何自定义剪贴板格式时,使用相同的过程;将格式名称传递给RegisterDlipboardFormat函数,然后使用其返回值作为格式表示符,具体方法是:1.    在视图类的声明文档中声明一个静态的自定义剪贴板类型:Static CLIPFORMAT

3NG 2780

剪贴板

<br /><br />一、传统剪贴板<br />     传统剪贴板的形式非常的简单,其基本思路是当复制时程序复制一个数据副本给全局内存对象,打开剪贴板并且清空剪贴板当中的数据,将全局内存对象复制给剪贴 板最后关闭剪贴板;从剪贴板中获取数据的顺序是打开剪贴板获取全局内存对象,锁定全局内存对象后从中复制数据,解锁内存对象并且关闭剪贴板。需要注意的是 剪贴板在某个时刻只能被一个程序所打开,如果试图打开一个已经被其他程序打开的剪贴板就会导致API 函数调用返回NULL 值,由于这个机制要求所有程序在 打开

uda1985的专栏 987

使用Visual C++实现OLE剪贴板

---- 一、概述---- 在Windows操作系统中存在两种剪贴板机制:Windows标准剪贴板OLE剪贴板机制。---- 标准的Windows剪贴板是一个被所有Windows应用程序共享的系统服务,因此它并没有自己的句柄或类。但你可以通过CWnd类的成员函数来管理剪贴板。---- 自从OLE(Object Linking and Embedding,对象链接和嵌入)诞生之后,Windows操

我的编程之旅 2648

2026年最新温岭市公交线路矢量数据.zip

数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息

Axure PR10和RunAsDate

Axure10用于查看原型设置,旧版10 支持“时间回拨”绕过试用期限制。

上一篇: MFC对COM接口编写的支持分析
下一篇: MFC浅析(1) 文档视图结构中,缺省的命令处理
FMD
FMD
博客等级 码龄26年 10粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值