现在有个新的问题,RichEdit怎么实现gif ole控件的复制和粘贴?
比如,我现在插入一个C:\\1.gif的ole控件在RichEdit中,传入的dwUser=1,来标识这个gif的唯一性。现在我在RichEdit中copy这个控件,然后 粘贴这个控件,我需要识别粘贴的gif的路径C:\\1.gif或者 dwUser=1,然后一样的插入到RichEdit中。
已经找到了点信息,就是在
RichEdit的 GetClicpboradData和 QueryAcceptData这两个callBack接口的实现中,通过自定义的数据格式转换ClipBorad中的 内容。
但是具体怎么做还是不知道。 有高手指教下吗?
比如,我现在插入一个C:\\1.gif的ole控件在RichEdit中,传入的dwUser=1,来标识这个gif的唯一性。现在我在RichEdit中copy这个控件,然后 粘贴这个控件,我需要识别粘贴的gif的路径C:\\1.gif或者 dwUser=1,然后一样的插入到RichEdit中。
已经找到了点信息,就是在
RichEdit的 GetClicpboradData和 QueryAcceptData这两个callBack接口的实现中,通过自定义的数据格式转换ClipBorad中的 内容。
但是具体怎么做还是不知道。 有高手指教下吗?
不过这样动画就没了
呵呵,我要求能够复制gif的。
{
//设置显示目标
STGMEDIUM stgMedium; stgMedium.tymed = TYMED_GDI;
stgMedium.hBitmap = pFacePic->GetBitmapHandle(pRichEdit->GetSafeHwnd());
stgMedium.pUnkForRelease = NULL; //设置显示格式
FORMATETC etcFormat;
etcFormat.cfFormat = CF_BITMAP;
etcFormat.ptd = NULL;
etcFormat.dwAspect = DVASPECT_CONTENT;
etcFormat.lindex = -1;
etcFormat.tymed = TYMED_GDI; //创建输入数据源及内存对象
IStorage* pISData;
LPLOCKBYTES lpLockBytes = NULL;
SCODE sCode; //校验码
sCode = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);
if (sCode != S_OK)
AfxThrowOleException(sCode);
ASSERT(lpLockBytes != NULL);
sCode = ::StgCreateDocfileOnILockBytes(lpLockBytes, STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &pISData);
if (sCode != S_OK)
{
VERIFY(lpLockBytes->Release() == 0);
lpLockBytes = NULL;
AfxThrowOleException(sCode);
}
ASSERT(pISData != NULL); COleDataSource* pDataSource = new COleDataSource;
pDataSource->CacheData(CF_BITMAP, &stgMedium);
LPDATAOBJECT lpDataObject = (LPDATAOBJECT)pDataSource->GetInterface(&IID_IDataObject); //获取RichEdit的OLEClientSite
LPOLECLIENTSITE lpClientSite;
pRichEdit->GetIRichEditOle()->GetClientSite(&lpClientSite); //创建OLE对象
IOleObject *pOleObject;
sCode = OleCreateStaticFromData(lpDataObject, IID_IOleObject, OLERENDER_FORMAT, &etcFormat, lpClientSite, pISData, (void **)&pOleObject);
if(sCode!=S_OK)
AfxThrowOleException(sCode); //插入OLE对象
REOBJECT reObject;
ZeroMemory(&reObject, sizeof(REOBJECT));
reObject.cbStruct = sizeof(REOBJECT);
CLSID clsid;
sCode = pOleObject->GetUserClassID(&clsid);
if (sCode != S_OK)
AfxThrowOleException(sCode); reObject.dwUser = nFaceIndex;
reObject.clsid = clsid;
reObject.cp = REO_CP_SELECTION;
reObject.dvaspect = DVASPECT_CONTENT;
reObject.poleobj = pOleObject;
reObject.polesite = lpClientSite;
reObject.pstg = pISData; pRichEdit->GetIRichEditOle()->InsertObject(&reObject);
delete pDataSource;
}
谢谢,呵呵,这个是插入ole控件的代码呀,我这个已经实现了,实现过程跟这个差不多的。我现在是想支持ole控件在richedit里面的复制和粘贴。
这样像什么链接安全检查啊,文字和链接分离啊 就很好控制了
我的做法就是插入我就是问,在RichEdit中复制和粘贴的时候,怎么知道我该插入那个呀? 我怎么获得我复制的是哪个gif呢?我的意思也是这样,我先获得我复制的那个gif,然后在粘贴的时候,我再插入一个相同的gif就完了。现在问题是,我不知道怎么获得复制的gif的相关信息?
你多提供个接口不就完事了?
腾讯的QQ就是这样做的
所以我们复制代码进QQ时会识别成便表情
比如/wx
腾讯的QQ就是这样做的
所以我们复制代码进QQ时会识别成便表情
比如/wx
我现在就是需要知道,我该怎么转义?就是我在RichEdit中点复制的时候,我怎么复制这个gif图标,也就是怎么获得与gif对应的转义字符串? 我现在的复制都是复制了整个gif图像?也就是我该怎么处理复制和粘贴?在哪处理??? 请教大哥,可以说的更详细些吗?