大家都看一下这个链接:
http://www.codeproject.com/richedit/COleRichEditCtrl.asp在Richedit中插入自定义的控制,我希望控制有和word、Excel一样的功能,可以支持“拖动”我打算做一个和qq类似的功能:能在Richedit中插入和播放gif动画1、必须是个控件,Richedit支持Ole插入,这一步已搞定,可以插入并正常播放Gif动画。2、不知道我这个控件还需要什么接口才能支持拖放3、Richedit支持Word和Excel这样的插入并支持拖动,不需要自已写onDrag这样的代码4、我查了很多资料,是IOleObject、IDragSource还是永久化存储?感觉需要很强的com知识哪里有这些资料,或者能否用ATL做一示例,谢谢!

解决方案 »

  1.   

    为做拖放,我建议你看一看MFC对COleDropTarget,COleDropSource和COleDataObject类的封装,当然也要看看CView的相关部分。
      

  2.   

    How to insert objects without using the InsertObject dialog box  
    http://support.microsoft.com/kb/q137357/SAMPLE: RichEdit.exe - Inserts OLE Object Capabilities
    http://support.microsoft.com/kb/141549
      

  3.   

    先谢谢二位,不过问题还是没有解决:1、我的控件已经写好,插入到Richedit中后可以正常播放gif动画2、如Word插入到Richedit后,不用写特殊的拖动控制代码就可以对其中的word进行复制、粘贴、拖动,因此我想知道我的控件需要提供什么接口支持才能像word
      

  4.   

    我是用ATL写播放GIF的控件的。
    class ATL_NO_VTABLE CGifAni : 
    public CComObjectRootEx<CComSingleThreadModel>,
    //public CStockPropImpl<CGifAni, IGifAni, &IID_IGifAni, &LIBID_GIFANIMLib>,
    public IDispatchImpl<IGifAni, &IID_IGifAni, &LIBID_GIFANIMLib>,
    public CComControl<CGifAni>,
    public IPersistStreamInitImpl<CGifAni>,
    public IOleControlImpl<CGifAni>,
    public IOleObjectImpl<CGifAni>,
    public IOleInPlaceActiveObjectImpl<CGifAni>,
    public IViewObjectExImpl<CGifAni>,
    public IOleInPlaceObjectWindowlessImpl<CGifAni>,
    public IPersistStorageImpl<CGifAni>,
    public ISpecifyPropertyPagesImpl<CGifAni>,
    public IQuickActivateImpl<CGifAni>,
    public IDataObjectImpl<CGifAni>,
    public IProvideClassInfo2Impl<&CLSID_GifAni, NULL, &LIBID_GIFANIMLib>,
    public CComCoClass<CGifAni, &CLSID_GifAni>
    不过根据http://support.microsoft.com/support/kb/articles/q241/9/36.asp自己改写了对IPersistStreamInit的实现
      

  5.   

    非常感谢jiangsheng,一开始我总是觉得应该用拖动来完成,搞了两天才发现拖动应该完成不了这个功能,就开始怀疑是不是永久化的问题, 谢谢jiangsheng兄。通过这事觉得怀疑就一定要试试,呵呵,再次谢谢二位!