做了个OCX显示GIF图片的。 提供了一个接口 : FrameChangge.   切换一帧.   然后设置了一个定时器,100秒调用一次.这个办法直接在richedit插入gif没有问题,可是复制了gif图片,再粘贴 则新的gif不能显示出来.是空白的。做了一天了。有点晕高手帮忙想想。

解决方案 »

  1.   

    100毫秒调用一次,写错了。公司不能网的,晚上在网上搜了半天,都只有DLL的,无代码。很多都是直接用QQ的imageole.dll。
      

  2.   

    楼主粘贴的时候Gif不能播放了 那楼主是不是去截获QQ的剪切板 看看QQ是怎么做的 
    估计QQ的剪切版不是把Gif直接弄进去的 而是表情的代码而且 QQ不能支持 你复制一个gif贴到输入框中去 楼主要想实现 粘贴后也是Gif 恐怕不是那么容易,
    直接赋值一个Gif文件倒还好说 可以从剪切板中读取 要是在绘图软件中截获了一部分呢?感觉用imageole.dll还是可取的 我觉得做到QQ上的样子就可以了 
    codeproject上的一个例子:
    http://www.codeproject.com/KB/edit/AnimatedEmoticon.aspx
      

  3.   

    没有实现IRichEditOleCallback 吧
      

  4.   

    实现IRichEditOleCallback后,用IStream读写GIF
      

  5.   

    首先谢谢楼上几位的帮忙。。to Tinary3v0 :
    原来公司用的就是QQ的控件,现在怕有版权的问题,而且imageole.dll闪的有点厉害。所以叫我重做。to jiangsheng  & yjgx007 
    我写了RichEditOleCallback,不过其中的实现大部分基本都只是简单的 return  S_OK。是在IExRichEditOleCallback::GetNewStorage里面写吗?我在GetNewStorage差不多这么写得IExRichEditOleCallback::GetNewStorage(LPSTORAGE* lplpstg)
    {
       SCODE sc;
       LPLOCKBYTES lpLockBytes = NULL;
       LPSTORAGE*  lpstg = NULL;
       sc = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);
       sc = ::StgCreateDocfileOnILockBytes(lpLockBytes,
            STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &lpstg );
       
       if(lpstg != NULL)
       {
          *lplpstg = lpstg ;
       }
       return s_ok;
    }
      

  6.   

    楼上的几位还能再讲两句?  不是很明白,是在GetClipboardData读,在QueryAcceptData写?