none
richedit拖拽得不到hbitmap RRS feed

  • 问题

  • 首先注册:

    IDropTarget *pdt = m_middle_edit->GetTxDropTarget();
    HRESULT hr = ::RegisterDragDrop(m_pm.GetPaintWindow(), pdt);
    pdt->Release();

    实现代码

    LPRICHEDITOLE IRichEditOle = m_middle_edit->GetRichEditOle();
    REOBJECT reobject;
    long lolecount = IRichEditOle->GetObjectCount();
    for (int i = 0; i < lolecount;i++)
    {
    ZeroMemory(&reobject, sizeof(REOBJECT));
    reobject.cbStruct = sizeof(REOBJECT);
    IRichEditOle->GetObjectW(i, &reobject, REO_GETOBJ_ALL_INTERFACES);
    int iPos = reobject.cp;

    IDataObject *pDataObject;
    if (S_OK != reobject.poleobj->QueryInterface(IID_IDataObject, (void **)&pDataObject))
    {
    return S_FALSE;
    }

    FORMATETC tFormat = { (CLIPFORMAT)CF_BITMAP, NULL, DVASPECT_CONTENT, -1, TYMED_GDI };
    STGMEDIUM tSTGMEDIUM;
    ZeroMemory(&tSTGMEDIUM, sizeof(STGMEDIUM));
    HRESULT hr = pDataObject->GetData(&tFormat, &tSTGMEDIUM);
    HBITMAP hbitmap111 = tSTGMEDIUM.hBitmap;
    reobject.poleobj->Release();
    pDataObject->Release();

    }

    问题是 插入一个图片 可以获取 tSTGMEDIUM.hBitmap; 但是图片在richedit里面拖拽移动位置以后

     tSTGMEDIUM.hBitmap;就是空了,这是为什么?


    2017年10月18日 3:04

全部回复

  • 需要实现IRichEditOleCallback::GetNewStorage


    Visual C++ MVP

    • 已建议为答案 Baron Bi 2017年10月18日 5:35
    2017年10月18日 3:51
    版主
  • 需要实现IRichEditOleCallback::GetNewStorage


    Visual C++ MVP

    HRESULT CRichEditOleCallback::GetNewStorage(LPSTORAGE* ppStg)
    {
    m_iNumStorages++;

    WCHAR tName[50];
    swprintf(tName, L"REOLEStorage%d", m_iNumStorages);

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


    return hResult;

    }

    这样实现的,但是没什么效果。hbitmap还是空

    2017年10月18日 6:07
  • Hi 岁月流年,

    感谢在MSDN论坛发帖。

    >>问题是 插入一个图片 可以获取 tSTGMEDIUM.hBitmap; 但是图片在richedit里面拖拽移动位置以后

     tSTGMEDIUM.hBitmap;就是空了,这是为什么?

    代码看起来没什么问题。请问你调试的时候能跑到这个函数里面吗?最好提供一下关于CRichEditOleCallback类的具体信息。

    GetNewStorage用来为从剪贴板粘贴的对象提供新的存储。

    这里有篇文档你可以参考一下。

    https://www.codeproject.com/articles/9541/a-rich-edit-control-that-displays-bitmaps-and-othe

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年10月26日 7:40