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

barb1972 2008-01-11 12:19:09
用RichEdit控件显示图片,用的是网上代码InsertBmpToRich,为什么显示的是图片框,而看不到图片,但是双击这个图片框,可以在图片浏览器中看到图片呢?
...全文
266 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
我苦苦等了一天了,难道就没有哪位高手指点迷津吗?

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧