zoukankan      html  css  js  c++  java
  • 文档视图结构中利用序列化机制使用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"));

  • 相关阅读:
    ngRoute AngularJs自带的路由
    AngularJs $resource 高大上的数据交互
    AngularJs filter 过滤器
    eBPF监控工具bcc系列一启航
    [转载] kprobe原理解析(一)
    c++通过CMake实现debug开关
    如何使用fio模拟线上环境
    汇编学习pushl, popl
    block:cfq 学习02
    阻抗匹配详细讲解(以前的转贴)
  • 原文地址:https://www.cnblogs.com/luoshupeng/p/2145021.html
Copyright © 2011-2022 走看看