读书人

richedit 自己实现了一个Ole显示gif图

发布时间: 2013-10-21 17:03:30 作者: rapoo

richedit 自己实现了一个Ole显示gif图片,拖放后,变成空白,据说重载这两个接口可以正常,但是没有效果,求解???????
本帖最后由 VisualEleven 于 2013-09-02 16:34:31 编辑 Ole控件是我自己实现的 用InsertObject 插入到richedit中的。

当图文混排后,我想拖动gif图片的位置,拖动之后 gif该在的位置 变成了一个空白的ole控件。

这个部分 应该怎么实现? 求解。

从CSDN等网上其他人的建议 加入这两个重载,但是并没有效果,
而且我发现拖动开始时 会进入到IPersistStreamInit_Save,但是IPersistStreamInit_Load一直都没有进去


STDMETHODIMP CxActiveControl::IPersistStreamInit_Save(LPSTREAM pStm, BOOL fClearDirty, ATL_PROPMAP_ENTRY* pMap)
{
//HRESULT hr = IPersistStreamInitImpl<CxActiveControl>::IPersistStreamInit_Save(pStm, fClearDirty, pMap);

//// ------------- TRYING TO SAVE THE IPICTURE
//if(_Pict)
//{
//CComQIPtr<IPersistStream> p = _Pict;
//p->Save(pStm, FALSE);
//}
//// -------------

if (NULL == pStm) return E_POINTER;

// Save the properties described in the PROP_MAP
HRESULT hr = IPersistStreamInitImpl<CxActiveControl>::IPersistStreamInit_Save(pStm, fClearDirty, pMap);
if (FAILED (hr)) return hr;

bSave = TRUE;
fClearDirty = TRUE; //////////

return hr;
}

STDMETHODIMP CxActiveControl::IPersistStreamInit_Load(LPSTREAM pStm, ATL_PROPMAP_ENTRY* pMap)
{
// ------------- TRYING TO LOAD THE IPICTURE
CComPtr<IPictureDisp> pic;
LARGE_INTEGER l;
l.QuadPart =0;
pStm->Seek(l, STREAM_SEEK_SET, NULL);

OleLoadPicture(pStm, l.LowPart, FALSE, IID_IPictureDisp, (void **) &pic);
if(pic)
{
_Pict = pic;
}

HRESULT hr = IPersistStreamInitImpl<CxActiveControl>::IPersistStreamInit_Load(pStm, pMap);

return hr;
}
C++??Richedit?Ole
[解决办法]
TMD同病相怜啊!!!我现在可以显示从截图工具粘贴过来的图,就是显示在自己控件里的图片粘贴不回去!真TM让我郁闷啊!我不懂ATL,无从查起……………………

读书人网 >VC/MFC

热点推荐