文档视图结构中利用序列化机制使用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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值