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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Microsoft Platform SDK Febrary 2003下载(更新VC6的SDK)
下一篇:人工智能2

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月17日 01时48分53秒