欢迎访问:常州市武进区嘉泽中心小学网站 !今天是:
栏目列表
您现在的位置是:首页>>教师>>计算机技术>>程序设计>>杂项>>文章内容
文档视图结构中利用序列化机制使用OLE剪贴板
发布时间:2008-11-20   点击:   来源:本站原创   录入者:佚名
  文档视图结构中利用序列化机制使用OLE剪贴板

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

FMD()

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

 


附件:
    关闭窗口
    打印文档
    账号登录
    保持登录 忘记密码?
    账号与武进教师培训平台同步