首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

richedit 自己实现了一个Ole显示gif图片,拖放后,变成空白,据说重载这两个接口可以正常,但是没有效果,求解?该怎么解决

2013-10-21 
richedit 自己实现了一个Ole显示gif图片,拖放后,变成空白,据说重载这两个接口可以正常,但是没有效果,求解?

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,无从查起……………………

热点排行