在RichEdit里面插入控件重写了 IRichEditOleCallback接口
GetClipboardData
QueryAcceptData
................
如何处理控件的复制操作??CRichEditCtrl::StreamOut
CRichEditCtrl::StreamIn吗?

解决方案 »

  1.   

    refer to: 
    http://www.vckbase.com/document/viewdoc/?id=328
      

  2.   

    不好意思,问题未扫描清楚就是复制控件后然后粘贴,使得粘贴后新的空间和复制的空间有完全一样的数据通过流如何实现,可以在控件里面直接做吗?
    COleControl::OnRenderData和
    COleControl::OnSetData有关系吗?
      

  3.   

    IRichEditOleCallback接口不懂 
    如果你只需要将你Edit里面的图片剪切 然后再贴回去 可以使用这样的思路假设你的Gif类为Cgif 这个类支持等号操作符。也就是 Cgif gif1; Cgif gif2; 可以这样运算 gif1 = gif2;那么建立一个CArray < Cgif, Cgif > gifBuffer;变量作为你Edit的自定义剪切板。如果用户执行Cut操作 你直接 往gifBuffer中增加一个或多个Cut的Cgif对象 gifBuffer.Add();执行Paste操作的时候 再从gifBuffer中读出来 还原给Edit。当然我没有这么做过 也不知道具体能不能实现 不过我做过简单数据图形的赋值粘贴 我就是这样 将对象通过自定义的剪切板来完成的。
      

  4.   

    STDMETHODIMP IRichEditOleCallbackImpl::GetNewStorage(LPSTORAGE FAR *lplpstg){    // Initialize a Storage Object from a DocFile in memory    LPLOCKBYTES lpLockBytes = NULL;    SCODE       sc  = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);    if (sc != S_OK) return sc;    sc = ::StgCreateDocfileOnILockBytes(lpLockBytes, STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, lplpstg);    if (sc != S_OK) lpLockBytes->Release();    return sc;}
      

  5.   

    GetNewStorage接口我也是这样写得我还露了什么吗?  一样的代码直接调用QQ的DLL,QQ直接就能复制粘贴了,而我的不行
    那就是控件写得不一样,我写得就是一个简单的显示GIF的OCX控件,从Colecontrol派生的类。
    不对么?
    公司不好上网的,下了班才有时间会回来看帖,多谢几位。
      

  6.   

    问题还未解决,写了个简单的OCX,插入到Richedit里面,哪位帮忙看看
      

  7.   

    和IRichEditOleCallbackImpl没关系啊,我和LZ一样的情况,也是复制拖放不行,换QQ的就可以,只要改控件就可以了,RICHEDIT这里不用改