怎么获取的插入到RichEdit控件的一张图片呀(或是一个OLE对象)。
IRichEditOle* pRichEditOle = m_SendEdit.GetIRichEditOle();
REOBJECT reobject;
IOleObject* oleobj;
ZeroMemory(&reobject, sizeof(REOBJECT));
reobject.cbStruct = sizeof(REOBJECT);
pRichEditOle->GetObject(0, &reobject, REO_GETOBJ_ALL_INTERFACES);
这样能得到ole对象的信息, 但我不知道样才能得到我插入到其中的hBitmap的句柄。希望大家不吝赐教,小弟感激不尽呀!!!!!!!!!!
还有一个问题,就是QQ的消息发送框能复制粘贴图片,复制是richedit自己实现的,但粘贴没有,怎么做呀?

解决方案 »

  1.   

    你能取回的只有一个Id而已,所以给你的每幅BMP编个号码,然后加入时指定为dwUser,取回的时候就知道是哪一幅BMP了~
      

  2.   

    to huaxiaoyu (宇宙骄龙):不要用 ★★★★★★★★★★★ 加在标题上, 你的问题和其他人的问题同样重要 :)
      

  3.   

    楼上的大哥,你是说我插入前给ole对象一个编号,并把这个对象存起来,后面通过编号对查找存入的对象的那个容器,并取出对象吗?
    但这样,RichEdit本身就存放了这些对象,我看资料说是可以通过它所提供的接口返回所插入的ole对象的呀,就这下面这段代码,但不知道什么地方有问题。
    IRichEditOle* pRichEditOle = m_SendEdit.GetIRichEditOle();
    REOBJECT reobject;
    IOleObject* oleobj;
    ZeroMemory(&reobject, sizeof(REOBJECT));
    reobject.cbStruct = sizeof(REOBJECT);
    pRichEditOle->GetObject(0, &reobject, REO_GETOBJ_ALL_INTERFACES);

    oleobj = reobject.poleobj;
    IDataObject *pDataObject;
    SCODE sc = oleobj->GetClipboardData(0, &pDataObject);
    if(sc != S_OK)
    {
        if (sc == OLE_E_NOTRUNNING )
    {
    //The object is not running. 
                    //错误提示对象没有运行,不知道怎么回来,倒底它说的对象是指什么对象呀?
    AfxThrowOleException(sc);
    return FALSE;
    }
    AfxThrowOleException(sc);
    return FALSE;
    }
    FORMATETC fm;
    STGMEDIUM sm;
    pDataObject->GetData(&fm, &sm);
    if (fm.cfFormat == CF_BITMAP)
    {
    //sm.hBitmap就是所插入的图片句柄了
    }
      

  4.   

    不过加入的时候他应该只是Link的object吧~并没有真正的embed~所以用Id来标示是最快捷有效的方法~
      

  5.   

    如果是BMP在剪贴板里面的话,应该是完整的DIB数据~
      

  6.   

    //插入OLE对象
    REOBJECT reobject;
    ZeroMemory(&reobject, sizeof(REOBJECT));
    reobject.cbStruct = sizeof(REOBJECT);

    CLSID clsid;
    sc = pOleObject->GetUserClassID(&clsid);
    if (sc != S_OK)
    AfxThrowOleException(sc);

    reobject.clsid = clsid;
    reobject.cp = REO_CP_SELECTION;
    reobject.dvaspect = DVASPECT_CONTENT;
    reobject.poleobj = pOleObject;
    reobject.polesite = lpClientSite;
    reobject.pstg = pStorage;
             reobuject.dwUser = 0x1f3a;
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      

  7.   

    SCODE sc = oleobj->GetClipboardData(0, &pDataObject);
    错误提示:"尚未实现"又是怎么回事呢? 
      我真的被这个问题彻底的搞跨了!!