怎样在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"));
//或者用RichView

|