用RichEdit控件显示图片,用的是网上代码InsertBmpToRich,为什么显示的是图片框,而看不到图片,但是双击这个图片框,可以在图片浏览器中看到图片呢?

barb1972 2008-01-11 12:19:09
用RichEdit控件显示图片,用的是网上代码InsertBmpToRich,为什么显示的是图片框,而看不到图片,但是双击这个图片框,可以在图片浏览器中看到图片呢?
...全文
231 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xie7128 2008-03-09
怎么样才可以保持原来图片的大小?
回复
xie7128 2008-03-09
怎么插入去的图片那么大的,还包括了图片的文件名?为什么?
回复
barb1972 2008-01-17
总于搞定了!
是这样:
在4楼的InsertBmpToRich函数里
将语句:
OleCreateFromFile(GUID_NULL, wstrBmpFile, ::IID_IOleObject,0, &FormatEtc, NULL, FStorage, (void**)&FOle);
改为:
OleCreateFromFile(GUID_NULL, wstrBmpFile, ::IID_IOleObject,OLERENDER_DRAW, &FormatEtc, NULL, FStorage, (void**)&FOle);
就可以了!
回复
Waiting4you 2008-01-15
我说的OLE库是针对图片格式的,比如我的电脑jpg和gif就不能用,但是插入bmp就问题. 不过用什么库我没做过也不清楚,应该是支持图片显示的ActiveX库都可以使用吧, 看这个贴:
http://topic.csdn.net/u/20080108/23/fde5e925-85c5-4725-bc69-327059de484b.html
回复
barb1972 2008-01-14
谢谢毛毛兄弟,可是怎么注册OLE库呢?我的项目里已经#include "richole.h" 了,而且我的项目里也做过OLE操作WORD,也没问题啊,你说的注册是怎么注册呢?
回复
barb1972 2008-01-13
明天就是星期一了,还没有任何进展,怎么办呢?没有高手出来指教吗?
回复
Waiting4you 2008-01-13
这个问题不是你的代码问题,而是你的系统里没有注册与图片对应的OLE库。
回复
barb1972 2008-01-12
谢谢 cczlp ,我用的就是这个代码,但是显示不出来图片,只有图片框,双击的话可以在图片浏览器中看到。但是在richedit中看不到
回复
cczlp 2008-01-12
怎样在RICHEDIT中插入图片 
void __fastcall InsertBmpToRich(TRichEdit *re, WideString wstrBmpFile)
{
IRichEditOle *RichOle;
SendMessage(re->Handle, EM_GETOLEINTERFACE, 0, int(&RichOle));

ILockBytes *FLockBytes;
CreateILockBytesOnHGlobal(0,1,&FLockBytes);

IStorage *FStorage;
StgCreateDocfileOnILockBytes(FLockBytes,STGM_SHARE_EXCLUSIVE |
STGM_CREATE | STGM_READWRITE,0,&FStorage);

TFormatEtc FormatEtc;
FormatEtc.cfFormat=0;
FormatEtc.ptd=NULL;
FormatEtc.dwAspect=DVASPECT_CONTENT;
FormatEtc.lindex=-1;
FormatEtc.tymed=TYMED_NULL;

IOleObject *FOle;
OleCreateFromFile(GUID_NULL, wstrBmpFile, ::IID_IOleObject,
0, &FormatEtc, NULL, FStorage, (void**)&FOle);
OleSetContainedObject(FOle, true);

REOBJECT ReObject;
ZeroMemory(&ReObject, sizeof(REOBJECT));
ReObject.cbStruct=sizeof(REOBJECT);
CLSID xt;
FOle->GetUserClassID(&xt);
ReObject.clsid=xt;
ReObject.cp=REO_CP_SELECTION;
ReObject.dvaspect=DVASPECT_CONTENT;
ReObject.dwFlags=REO_STATIC | REO_BELOWBASELINE;
ReObject.dwUser=0;
ReObject.poleobj=FOle;

IOleClientSite *FClientSite;
RichOle->GetClientSite(&FClientSite);
ReObject.polesite=FClientSite;
ReObject.pstg=FStorage;
ReObject.sizel.cx=0;
ReObject.sizel.cy=0;

RichOle->InsertObject(&ReObject);
}



//调用方法:

InsertBmpToRich(RichEdit1, WideString("D:\\source\\Linux_Image\\header-projects.png"));

回复
barb1972 2008-01-11
请高手指点一下吧,项目不能到这里卡壳儿啊
回复
Waiting4you 2008-01-11
把InsertBmpToRich这段代码或者网络链接发上来
回复
barb1972 2008-01-11
我苦苦等了一天了,难道就没有哪位高手指点迷津吗?
回复
发动态
发帖子
茶馆
创建于2007-08-02

525

社区成员

C++ Builder 茶馆
申请成为版主
社区公告
暂无公告