请问在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;
}现在不知道怎样修改已经插入的图片,也就是重新绘制它
{
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;
}现在不知道怎样修改已经插入的图片,也就是重新绘制它
解决方案 »
- 编译ActiveX控件时一直在Registering output...
- 线程问题!
- 在HTML中如何实现VC的界面
- error C2059: syntax error : '(' 出现了错误 大家进来看哈~~
- 20种语言祝大家圣诞快乐!!!
- 求教win7+vc6或vs2008如何搭建nt式驱动开发环境
- 程序中如何使win2000关机
- 那位大虾告诉我#ifndef 和 #if !define 有什么区别
- USB GUID missing function header (old-style formal list?) 问题
- 谁能告诉我怎么用vc做到这样的窗口半透明效果?
- 请问如何在VC++.NET 2003项目资源中添加已有ICON
- 在线等!!!急!!!!!!!!一个关于动态链接库的简单问题.
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显示为 设备独立位图,就是不知道怎样去重新绘制它
http://community.csdn.net/Expert/topic/3334/3334209.xml?temp=.8609888但是我把控件引入后,没有CreateDispatch方法啊