请问在RichEdit里面通过IDataObject接口插入的图片怎么动态修改?图片是插入方法:CImageDataObject* CImageDataObject::InsertBitmap(IRichEditOle* pRichEditOle, HBITMAP hBitmap,DWORD index,long iPos)
{

if(!hBitmap)return NULL; SCODE sc;

// Get the image data object
//
CImageDataObject *pods = new CImageDataObject;
LPDATAOBJECT lpDataObject;
pods->QueryInterface(IID_IDataObject, (void **)&lpDataObject);
pods->SetBitmap(hBitmap); // Get the RichEdit container site
//
IOleClientSite *pOleClientSite;
pRichEditOle->GetClientSite(&pOleClientSite); // Initialize a Storage Object
//
IStorage *pStorage; LPLOCKBYTES lpLockBytes = NULL;
sc = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);
if (sc != S_OK)
AfxThrowOleException(sc);
ASSERT(lpLockBytes != NULL);

sc = ::StgCreateDocfileOnILockBytes(lpLockBytes,
STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &pStorage);
if (sc != S_OK)
{
VERIFY(lpLockBytes->Release() == 0);
lpLockBytes = NULL;
AfxThrowOleException(sc);
}
ASSERT(pStorage != NULL); // The final ole object which will be inserted in the richedit control
//
IOleObject *pOleObject; 
pOleObject = pods->GetOleObject(pOleClientSite, pStorage); // all items are "contained" -- this makes our reference to this object
//  weak -- which is needed for links to embedding silent update.
OleSetContainedObject(pOleObject, TRUE); // Now Add the object to the RichEdit 
//
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 =iPos;// REO_CP_SELECTION;
reobject.dvaspect = DVASPECT_CONTENT;
reobject.poleobj = pOleObject;
reobject.polesite = pOleClientSite;
reobject.pstg = pStorage;
reobject.dwUser=index; // Insert the bitmap at the current location in the richedit control
//
pRichEditOle->InsertObject(&reobject); // Release all unnecessary interfaces
//
pOleObject->Release();
pOleClientSite->Release();
pStorage->Release();
lpDataObject->Release(); return pods;
}现在不知道怎样修改已经插入的图片,也就是重新绘制它

解决方案 »

  1.   

    在运行时已经通过以下办法取得了对象:

    REOBJECT obj;
    ZeroMemory(&obj, sizeof(REOBJECT));
    obj.cbStruct = sizeof(REOBJECT);
    obj.cp=iPos;
    m_pRichEditOleMain->GetObject(REO_IOB_USE_CP,&obj,REO_GETOBJ_POLEOBJ);功过跟踪发现这时:obj.clsid显示为 设备独立位图,就是不知道怎样去重新绘制它
      

  2.   

    http://www.blogcn.com/user3/jiangsheng/blog/1319738.html
      

  3.   

    那以前的怎样释放?会不会有内存泄露?因为这个修改是很频繁的,是要实现类似MSN传输文件时的进度条效果的
      

  4.   

    那你还是写个基于进度条的ActiveX控件把
      

  5.   

    老大,ActiveX控件好了,但是怎样插入到richedit中去啊,我参照
    http://community.csdn.net/Expert/topic/3334/3334209.xml?temp=.8609888但是我把控件引入后,没有CreateDispatch方法啊
      

  6.   

    Create之后通过CWnd::GetControlUnknown查询IOleObject接口
      

  7.   

    问题还没有解决,没法取得插入控件的Rect