工控编程吧
标题:
91上位机VC MFC富编辑框插入图片
[打印本页]
作者:
qq263946146
时间:
2015-12-16 21:58
标题:
91上位机VC MFC富编辑框插入图片
(, 下载次数: 0)
上传
点击文件名下载附件
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);
void CRichEditCtrlEx::InsertBitmap(CString sPath)
{
HBITMAP bmp;
//创建HBITMAP
bmp = (HBITMAP)::LoadImage(NULL, sPath, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE);
STGMEDIUM stgm;
stgm.tymed = TYMED_GDI;
stgm.hBitmap = bmp;
stgm.pUnkForRelease = NULL;
FORMATETC fm;
fm.cfFormat = CF_BITMAP;
fm.ptd = NULL;
fm.dwAspect = DVASPECT_CONTENT;
fm.lindex = -1;
fm.tymed = TYMED_GDI;
//创建输入数据源
IStorage *pStorage;
复制代码
//分配内存
LPLOCKBYTES lpLockBytes = NULL;
SCODE sc = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);
if (sc != S_OK)
AfxThrowOleException(sc);
ASSERT(lpLockBytes != NULL);
sc = ::StgCreateDocfileOnILockBytes(lpLockBytes,
STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &pStorage);
if (sc != S_OK)
{
VERIFY(lpLockBytes->Release() == 0);
lpLockBytes = NULL;
AfxThrowOleException(sc);
}
ASSERT(pStorage != NULL);
COleDataSource *pDataSource = new COleDataSource;
pDataSource->CacheData(CF_BITMAP, &stgm);
LPDATAOBJECT lpDataObject =
(LPDATAOBJECT)pDataSource->GetInterface(&IID_IDataObject);
//获取RichEdit的OLEClientSite
LPOLECLIENTSITE lpClientSite;
this->GetIRichEditOle()->GetClientSite( &lpClientSite );
//创建OLE对象
IOleObject *pOleObject;
sc = OleCreateStaticFromData(lpDataObject,IID_IOleObject,OLERENDER_FORMAT,
&fm,lpClientSite,pStorage,(void **)&pOleObject);
if(sc!=S_OK)
AfxThrowOleException(sc);
复制代码
//插入OLE对象
REOBJECT reobject;
ZeroMemory(&reobject, sizeof(REOBJECT));
reobject.cbStruct = sizeof(REOBJECT);
CLSID clsid;
sc = pOleObject->GetUserClassID(&clsid);
if (sc != S_OK)
AfxThrowOleException(sc);
reobject.clsid = clsid;
reobject.cp = REO_CP_SELECTION;
reobject.dvaspect = DVASPECT_CONTENT;
reobject.poleobj = pOleObject;
reobject.polesite = lpClientSite;
reobject.pstg = pStorage;
HRESULT hr = this->GetIRichEditOle()->InsertObject( &reobject );
delete pDataSource;
}
复制代码
最后是类的使用,在主对话框中添加富编辑框控件,关联我们的类CRichEditCtrlEx m_RichEditEx;然后通过按钮函数加载位图即可
CString s,s1;
GetDlgItemText(IDC_EDIT1,s);
s+=".bmp";
s1.Format("%s",".\\res\\");
s1+=s;
m_RichEditEx.InsertBitmap(s1);
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/572beefa3bcb4f67b772ec12bf342ab1/0/0/w_19rt7hcyv1.swf-albumId=5033729809-tvId=5033729809-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4