关于RichEditctrl显示图片的问题,谢谢
我给一个RichEditctrl插入一个bmp图片,这个图片很大,在RichEditctrl里只显示了图片的左上部分,请问怎么样可以让控件显示完整的图片,谢谢大家
InsertBitmap(&CString("d:\\Pic_BackGround.bmp"));
void ProjectionManagerDlg::InsertBitmap(CString *pBmpFile)
{
HBITMAP bmp;
//创建HBITMAP
bmp = (HBITMAP)::LoadImage(NULL, *pBmpFile, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE);
STGMEDIUM stgm;
stgm.tymed = TYMED_GDI;
stgm.hBitmap = bmp;
stgm.pUnkForRelease = NULL;
FORMATETC fm;
fm.cfFormat = CF_BITMAP;
fm.ptd = NULL;
fm.dwAspect = DVASPECT_CONTENT;
fm.lindex = -1;
fm.tymed = TYMED_GDI;
//创建输入数据源
IStorage *pStorage;
//分配内存
LPLOCKBYTES lpLockBytes = NULL;
SCODE 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);
COleDataSource *pDataSource = new COleDataSource;
pDataSource->CacheData(CF_BITMAP, &stgm);
LPDATAOBJECT lpDataObject =
(LPDATAOBJECT)pDataSource->GetInterface(&IID_IDataObject);
//获取RichEdit的OLEClientSite
LPOLECLIENTSITE lpClientSite;
this->m_richedit_projection.GetIRichEditOle()->GetClientSite(&lpClientSite);
//创建OLE对象
IOleObject *pOleObject;
sc = OleCreateStaticFromData(lpDataObject,IID_IOleObject,OLERENDER_FORMAT,
&fm,lpClientSite,pStorage,(void **)&pOleObject);
if(sc!=S_OK)
AfxThrowOleException(sc);
//插入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;
HRESULT hr = this->m_richedit_projection.GetIRichEditOle()->InsertObject( &reobject );
delete pDataSource;
}
...全文
相关推荐
可以为RichEditCtrl中添加图片类
最后,为了使图片在RichEditCtrl中正确显示,我们需要处理EN_LINK消息,该消息在用户点击或选择链接时发送。我们可以检查消息的msg参数,如果对应于用户与图片交互,就显示相应的图片。
CRichEditCtrl实现MSNQQ动画表情
需要注意的是,实际开发过程中还需考虑异常处理、资源释放等问题,以确保程序稳定运行。
RichEditCtrl
当然,`RichEditCtrl`的功能远不止这些,它还支持嵌入图片、表格、OLE对象等。
RichEditCtrl变颜色显示
本文将详细介绍如何使用RichEditCtrl来实现类似编译器的语法高亮显示,使得代码更加易读,提升用户体验。首先,我们需要理解`RichEditCtrl`的基本用法。
richeditctrl中修改文字颜色+保存为rtf文件
**注意事项**: - 为了正确显示颜色和其他富文本格式,确保RichEditCtrl的`ES_READONLY`和`ES_WANTRETURN`样式未被设置,因为它们可能会影响格式的处理。


