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

文档视图结构中利用序列化机制使用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"));

 

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

FMD

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值