安徽阜阳的男人的特点:如何在RichEdit中插入图片?

来源:百度文库 编辑:高校问答 时间:2024/04/30 00:56:09
如何在RichEdit中插入图片?
网络上有代码,我用的是C++Builder 6.0 ,无法编译。请大家告诉我如何解决。代码如下:
void __fastcall TForm1::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);
}
我知道为什么编译不过去,要加入以下三个头文件

#include "richedit.h"
#include "ole2.h"
#include "richole.h"

但编译通过了,却为何无法看到插入图片的效果?
我调用的肯定没错,但就是看不到效果,你们看了吗??

我自己解决了!

在调用InsertBmpToRich(TRichEdit *re, WideString wstrBmpFile)函数的时候,试做用图片全路径的形式调用(最好用BMP格式的),如
String filename="d:\\picture\\pic1.bmp";

InsertBmpToRich(RichEdit1,WideString(filename));

其他的需要你自己调试.