CRichEdit中插入bmp图像
发布日期:2021-06-29 04:15:31
浏览次数:2
分类:技术文章
本文共 2671 字,大约阅读时间需要 8 分钟。
1在对话框中拉入一个RichEdit控件。为它关联一个控件值CRichEditCtrl m_rch;
2加入2个头文件
#include <afxole.h> #include <richole.h>
3在对话框中,添加成员函数
void CDialogDlg::InsertBitmap(CString *pBmpFile) { HBITMAP bmp; //创建HBITMAP bmp = (HBITMAP)::LoadImage(NULL, *pBmpFile, 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; m_rch.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 = m_rch.GetIRichEditOle()->InsertObject( &reobject ); delete pDataSource; }然后就可以调用这个函数了
void CWhatFuckDlg::OnFasong() { // TODO: Add your control notification handler code here InsertBitmap(&CString("d:\\haha.bmp"));}值得注意的是,一定要API函数初始化,否则,运行之后是不会弹出窗口的
BOOL CWhatFuckApp::InitInstance(){ ::AfxInitRichEdit();。。。//要加入这个初始化函数效果如下:
转载地址:https://blog.csdn.net/zh634455283/article/details/8007996 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月17日 01时48分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ThinkPad X1 Carbon安装win7.
2019-04-29
EasyOrtho卫星影像处理软件
2019-04-29
TerraMaster RAID Manager
2019-04-29
vmware vcenter converter(物理机转换虚拟机)
2019-04-29
解决Surface 网卡不识别
2019-04-29
回收站东西太多删不掉
2019-04-29
超融合与云计算的区别是什么?
2019-04-29
SuperSocket
2019-04-29
修改ant design的tooltip组件中的字体颜色(2分钟解决战斗)
2019-04-29
参观邓小平故居有感
2019-04-29
教你如何查看linux版本
2019-04-29
Linux下利用crontab执行任务
2019-04-29
RedHat Linux下注册Apache为系统服务
2019-04-29
使用LoadRunner监控Apache的步骤
2019-04-29
LoadRunner录制脚本时报加载GrooveUtil.dll出错的解决方法
2019-04-29
用Spotlight实时监控Windows Server 2008
2019-04-29
Tomcat 6.0.32中调整JVM大小及最大线程数
2019-04-29
Mysql数据库下载及安装
2019-04-29
MySql安装时解决要输入current root password的方法
2019-04-29
Linux下free命令详解
2019-04-29