RichEdit显示文件中的BMP以及插入BMP到RichEdit

作者:毛毛

转自:http://topic.csdn.net/u/20080318/20/5d07a670-1517-4675-95d9-f94d417b3cec.html

#include <comdef.h>
#include <richedit.h>
#include <richole.h>
#include <comobj.hpp>//CheckOle :vcl
struct TRichEditOleCallback : public IRichEditOleCallback
{
public:
    TRichEditOleCallback()
        :pStorage(NULL),m_iNumStorages(0),m_dwRef(0)
    {
        HRESULT hResult = ::StgCreateDocfile(NULL,
            STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE /*| STGM_DELETEONRELEASE */|STGM_CREATE ,
            0, &pStorage );


        OleCheck( hResult );
    }


    virtual HRESULT STDMETHODCALLTYPE GetNewStorage(LPSTORAGE* lplpstg)
    {
        WCHAR tName[50];
        wsprintfW(tName, L"REOLEStorage%d", m_iNumStorages++);


        HRESULT hResult = pStorage->CreateStorage(tName,
            STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE ,
            0, 0, lplpstg );
        OleCheck( hResult );


        return hResult;
    }
    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void ** ppvObject)
    {
        HRESULT hr = S_OK;
        *ppvObject = NULL;


        if ( iid == IID_IUnknown ||
            iid == IID_IRichEditOleCallback )
        {
            *ppvObject = this;
            AddRef();
            hr = NOERROR;
        }
        else
        {
            hr = E_NOINTERFACE;
        }


        return hr;
    }
    virtual ULONG STDMETHODCALLTYPE AddRef()
    {
        return ++m_dwRef;
    }
    virtual ULONG STDMETHODCALLTYPE Release()
    {
        if ( --m_dwRef == 0 )
        {
            delete this;
            return 0;
        }


        return m_dwRef;
    }
    virtual HRESULT STDMETHODCALLTYPE GetInPlaceContext(LPOLEINPLACEFRAME FAR *lplpFrame,
        LPOLEINPLACEUIWINDOW FAR *lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo)
    {
        return S_OK;
    }
    virtual HRESULT STDMETHODCALLTYPE ShowContainerUI(BOOL fShow)
    {
        return S_OK;
    }
    virtual HRESULT STDMETHODCALLTYPE QueryInsertObject(LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp)
    {
        return S_OK;
    }
    virtual HRESULT STDMETHODCALLTYPE DeleteObject(LPOLEOBJECT lpoleobj)
    {
        return S_OK;
    }
    virtual HRESULT STDMETHODCALLTYPE QueryAcceptData(LPDATAOBJECT lpdataobj, CLIPFORMAT FAR *lpcfFormat,
        DWORD reco, BOOL fReally, HGLOBAL hMetaPict)
    {
        return S_OK;
    }
    virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode)
    {
        return S_OK;
    }
    virtual HRESULT STDMETHODCALLTYPE GetClipboardData(CHARRANGE FAR *lpchrg, DWORD reco, LPDATAOBJECT FAR *lplpdataobj)
    {
        return S_OK;
    }
    virtual HRESULT STDMETHODCALLTYPE GetDragDropEffect(BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect)
    {
        return S_OK;
    }
    virtual HRESULT STDMETHODCALLTYPE GetContextMenu(WORD seltyp, LPOLEOBJECT lpoleobj, CHARRANGE FAR *lpchrg,
        HMENU FAR *lphmenu)
    {
        return S_OK;
    }
private:
    int m_iNumStorages;
    IStorage* pStorage;
    DWORD m_dwRef;
};

使用方法:

TRichEditOleCallback g_roc;
SendMessage(RichEdit1->Handle,EM_SETOLECALLBACK,0,LPARAM(&g_roc));//初始化

插入BMP:

Clipbroad()->Assign(bmp);
RichEdit1->Paste();


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值