QQ登录

只需一步,快速开始

91上位机VC MFC富编辑框插入图片

[ 复制链接 ]

91上位机VC MFC富编辑框插入图片

91上位机VC MFC富编辑框插入图片

91上位机VC MFC富编辑框插入图片


功能展示

富编辑框中显示文字同时再显示图片,图文并茂效果更佳,我们当前例程给CRichEditCtrl播放图片扩展它默认的不支持图片插入功能,效果如图
要点提示
富编辑框中插入图片可以以这种形式实现GetIRichEditOle()->InsertObject(&reobject ); reobject 为REOBJECT 的OLE对象, 创建REOBJECT 首先得创建HBITMAP对象;使用函数LoadImage()便可快速创建HBITMAP位图对象;当前例程以此形式创建 HBITMAP bmp; //创建HBITMAP
bmp = (HBITMAP):oadImage(NULL, sPath,IMAGE_BITMAP, 0, 0,
  LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE);其中sPath为位图所在路径;





实现功能
1.新建基于对话框的应用程序
2.新建自定义类class CRichEditCtrlEx : publicCRichEditCtrl,添加头文件#include <afxole.h>

#include <Richole.h>再添加 一函数用于位图void InsertBitmap(CString sPath);
  1. void CRichEditCtrlEx::InsertBitmap(CString sPath)
  2. {

  3.         HBITMAP bmp;
  4.         //创建HBITMAP
  5.         bmp = (HBITMAP)::LoadImage(NULL, sPath, IMAGE_BITMAP, 0, 0,
  6.                 LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE);

  7.         STGMEDIUM stgm;
  8.         stgm.tymed = TYMED_GDI;
  9.         stgm.hBitmap = bmp;
  10.         stgm.pUnkForRelease = NULL;
  11.         
  12.         FORMATETC fm;
  13.         fm.cfFormat = CF_BITMAP;
  14.         fm.ptd = NULL;
  15.         fm.dwAspect = DVASPECT_CONTENT;
  16.         fm.lindex = -1;
  17.         fm.tymed = TYMED_GDI;  
  18.         
  19.         //创建输入数据源
  20.         IStorage *pStorage;
  21.         
  22.         
复制代码
  1. //分配内存
  2.         LPLOCKBYTES lpLockBytes = NULL;
  3.         SCODE sc = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);
  4.         if (sc != S_OK)
  5.                 AfxThrowOleException(sc);
  6.         ASSERT(lpLockBytes != NULL);
  7.         
  8.         sc = ::StgCreateDocfileOnILockBytes(lpLockBytes,
  9.                 STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &pStorage);
  10.         if (sc != S_OK)
  11.         {
  12.                 VERIFY(lpLockBytes->Release() == 0);
  13.                 lpLockBytes = NULL;
  14.                 AfxThrowOleException(sc);
  15.         }
  16.         ASSERT(pStorage != NULL);
  17.         
  18.         COleDataSource *pDataSource = new COleDataSource;
  19.         pDataSource->CacheData(CF_BITMAP, &stgm);
  20.         LPDATAOBJECT lpDataObject =
  21.                 (LPDATAOBJECT)pDataSource->GetInterface(&IID_IDataObject);
  22.         
  23.         //获取RichEdit的OLEClientSite
  24.         LPOLECLIENTSITE lpClientSite;
  25.         this->GetIRichEditOle()->GetClientSite( &lpClientSite );
  26.         
  27.         //创建OLE对象
  28.         IOleObject *pOleObject;
  29.         sc = OleCreateStaticFromData(lpDataObject,IID_IOleObject,OLERENDER_FORMAT,
  30.                 &fm,lpClientSite,pStorage,(void **)&pOleObject);
  31.         if(sc!=S_OK)
  32.                 AfxThrowOleException(sc);
  33.         
  34.         
复制代码
  1. //插入OLE对象
  2.         REOBJECT reobject;
  3.         ZeroMemory(&reobject, sizeof(REOBJECT));
  4.         reobject.cbStruct = sizeof(REOBJECT);
  5.         
  6.         CLSID clsid;
  7.         sc = pOleObject->GetUserClassID(&clsid);
  8.         if (sc != S_OK)
  9.                 AfxThrowOleException(sc);
  10.         
  11.         reobject.clsid = clsid;
  12.         reobject.cp = REO_CP_SELECTION;
  13.         reobject.dvaspect = DVASPECT_CONTENT;
  14.         reobject.poleobj = pOleObject;
  15.         reobject.polesite = lpClientSite;
  16.         reobject.pstg = pStorage;
  17.         
  18.         HRESULT hr = this->GetIRichEditOle()->InsertObject( &reobject );

  19.         delete pDataSource;
  20. }
复制代码
最后是类的使用,在主对话框中添加富编辑框控件,关联我们的类CRichEditCtrlEx  m_RichEditEx;然后通过按钮函数加载位图即可
  CString s,s1;
  GetDlgItemText(IDC_EDIT1,s);
  s+=".bmp";
  s1.Format("%s",".\\res\\");
  s1+=s;
  m_RichEditEx.InsertBitmap(s1);


我们来演示下功能实现的整个过程

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:91.上位机VC MFC富编辑框插入图片.rar 
文件大小:477.58 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索