为什么在有的计算机上往RichEdit插入BMP图片出问题?
插入图片的函数如下,在大多数机器上正常,但在少数机器上出现这样的问题:insertobject 后插入了空白框,看不到bmp图片,哪位知道如何解决?
从网上下载的vc的例子也是出现同样的问题。
bool insertbitmap(trichedit *editor, string bmpfile )
{
iricheditole *frtf;
ioleobject *fole;
tformatetc formatetc;
istorage *fstorage;
ioleclientsite *fclientsite;
ilockbytes *flockbytes;
reobject reobject;
clsid xt;
if(!fileexists(bmpfile))
return(false);
try {
sendmessage(editor->handle, em_getoleinterface, 0, int(&frtf));
if(frtf==null)
return(false);
if(createilockbytesonhglobal(0,true,&flockbytes)!=s_ok)
return(false);
if(stgcreatedocfileonilockbytes(flockbytes,stgm_share_exclusive | stgm_create | stgm_readwrite,0,&fstorage)!=s_ok)
return(false);
formatetc.cfformat=0;
formatetc.ptd=null;
formatetc.dwaspect=dvaspect_content;
formatetc.lindex=-1;
formatetc.tymed=tymed_null;
frtf->getclientsite(&fclientsite);
if(olecreatefromfile(guid_null,pwidechar(widestring(bmpfile)),::iid_iunknown,
0,&formatetc,null,fstorage,&((void*)fole))!=s_ok)
return(false);
iunknown *ftemp;
ftemp=fole;
ftemp->queryinterface(::iid_ioleobject, &((void*)fole));
olesetcontainedobject(fole, true);
zeromemory(&reobject, sizeof(reobject));
reobject.cbstruct=sizeof(reobject);
fole->getuserclassid(&xt);
reobject.clsid=xt;
reobject.cp=(unsigned long)reo_cp_selection;
reobject.dvaspect=dvaspect_content;
reobject.dwflags=reo_static | reo_belowbaseline;
reobject.dwuser=0;
reobject.poleobj=fole;
reobject.polesite=fclientsite;
reobject.pstg=fstorage;
reobject.sizel.cx=0;
reobject.sizel.cy=0;
frtf->insertobject(&reobject);
}
catch(...)
{
frtf=null;
fole=null;
}
return(true);
}
推荐阅读
我的机上就不能插入(函数返回true),我怀疑是少装某些软件所至.
看不懂呀,关注
估计是richedit版本的问题,有的是2的有的是1的不过没有试过
不可能richedit的版本问题,我在98及2k下用的是同一程序,可能是2k的权限问题
我在98、2000、xp都测试过了,没有问题
我的2k
richedit1->lines->loadfromfile("aaa.rtf");
都无法显示图片,可能是某个系统dll有问题
to:yangbin (yangbing)
把你的源码全部贴出一下!
改成richedit2.0的话不用ole这么麻烦
直接pastefromclipboard就行
to:zjqyb()
关于在cb6中如何使用richedit2.0插入图形!也发一份我吧!cjd@softwww.com 谢谢了!
bcb6用的是richedit2.0?
.

讨论区