我做了一个往richedit插入图片的程序
图片可以被插入到我的richedit中
但是我拷贝这个插入的图片到word中的时候
只显示一个图片轮廓
如何能够让word识别并显示我自定义的这个ole对象呢?

解决方案 »

  1.   

    应该是剪切板问题, 重载richedit的copy消息函数,实现windows bitmap的剪切板copy/paste,
      

  2.   


    直接使用bitmap的copy paste应该是可以的
    但是我想做到像wps一样
    能够让word中的“对象”识别出我的自定义的ole对象并正确显示,
    (wps对象可以嵌入到word中)
    是否word需要回调回我的程序,我在那里面作一些工作呢? 
      

  3.   

    我的对象有自己的名称和clsid,但是能不能让word直接识别为图像呢?
      

  4.   

    你是想把图片作为OLE插入word还是把你的程序作为OLE对象插入Word呀?
      

  5.   

    感觉你这样做是不是应该在你的copy消息函数中去写一个Word能过认识的剪切板内容啊。
    好像应该使用VBA什么的吧。
      

  6.   


    我想把我的程序作为ole对象插入到word中
    我自己包装了一个ole对象的容器,我的ole对象里面实际上放了一个图片感觉显示的地方有问题,有可能和IViewObjectEx有关系
    在word中我的对象无法正常显示
      

  7.   


    copy里面不好做,因为richedit里面可能放了许多东西,包括文本之类的
    不仅仅只有我的包装的对象我试过copy,可以直接取出我的图片,然后在copy里面塞给一个oledatasource,然后放到剪贴板里
    这个可以成功copy到word,但应该不是我想要的
      

  8.   

    用到了istream,word 张贴的时候会回调一个接口,传入一个istorage,然后用我的stream来初始化这个storage,应该是有把内容传过去的,但就是显示不对发现在粘贴的时候word会回调一次IViewObjectEx 的ondraw接口
    但是传入的ATL_DRAWINFO里的dc为空
    导致不会调我自己的绘制的函数可能和这个有关,但dc为什么是空呢? 
      

  9.   

    Unlike most other interfaces, IViewObject cannot be marshaled to another process. This is because device contexts are only effective in the context of one process. 难道本来dc就应该是空的?
    那怎么处理显示阿?
      

  10.   

    已经说得很清楚了,DC不能跨进程传递。要么你制作一幅公共的图片(比如BMP)放入剪贴板,要么让word加载你的DLL(这就是嵌入)来负责对象的显示。