/************************************************************************** * IDataObject_fnGetData */ HRESULT WINAPI CIDLDataObj::GetData(LPFORMATETC pformatetcIn, STGMEDIUM *pmedium) { char szTemp[256]; szTemp[0] = 0; GetClipboardFormatNameA (pformatetcIn->cfFormat, szTemp, 256); TRACE("(%p)->(%p %p format=%s)\n", this, pformatetcIn, pmedium, szTemp); if (pformatetcIn->cfFormat == cfShellIDList) { if (cidl < 1) return(E_UNEXPECTED); pmedium->hGlobal = RenderSHELLIDLIST(pidl, apidl, cidl); } else if (pformatetcIn->cfFormat == CF_HDROP) { if (cidl < 1) return(E_UNEXPECTED); pmedium->hGlobal = RenderHDROP(pidl, apidl, cidl); } else if (pformatetcIn->cfFormat == cfFileNameA) { if (cidl < 1) return(E_UNEXPECTED); pmedium->hGlobal = RenderFILENAMEA(pidl, apidl, cidl); } else if (pformatetcIn->cfFormat == cfFileNameW) { if (cidl < 1) return(E_UNEXPECTED); pmedium->hGlobal = RenderFILENAMEW(pidl, apidl, cidl); } else if (pformatetcIn->cfFormat == cfPreferredDropEffect) { pmedium->hGlobal = RenderPREFEREDDROPEFFECT(dropeffect); } else { FIXME("-- expected clipformat not implemented\n"); return (E_INVALIDARG); } if (pmedium->hGlobal) { pmedium->tymed = TYMED_HGLOBAL; pmedium->pUnkForRelease = NULL; return S_OK; } return E_OUTOFMEMORY; }
/************************************************************************** * IDataObject_fnGetData */ static HRESULT WINAPI IDataObject_fnGetData(LPDATAOBJECT iface, LPFORMATETC pformatetcIn, STGMEDIUM *pmedium) { IDataObjectImpl *This = (IDataObjectImpl *)iface; char szTemp[256]; szTemp[0]=0; GetClipboardFormatNameA (pformatetcIn->cfFormat, szTemp, 256); TRACE("(%p)->(%p %p format=%s)\n", This, pformatetcIn, pmedium, szTemp); if (pformatetcIn->cfFormat == This->cfShellIDList) { if (This->cidl < 1) return(E_UNEXPECTED); pmedium->u.hGlobal = RenderSHELLIDLIST(This->pidl, This->apidl, This->cidl); } else if (pformatetcIn->cfFormat == CF_HDROP) { if (This->cidl < 1) return(E_UNEXPECTED); pmedium->u.hGlobal = RenderHDROP(This->pidl, This->apidl, This->cidl); } else if (pformatetcIn->cfFormat == This->cfFileNameA) { if (This->cidl < 1) return(E_UNEXPECTED); pmedium->u.hGlobal = RenderFILENAMEA(This->pidl, This->apidl, This->cidl); } else if (pformatetcIn->cfFormat == This->cfFileNameW) { if (This->cidl < 1) return(E_UNEXPECTED); pmedium->u.hGlobal = RenderFILENAMEW(This->pidl, This->apidl, This->cidl); } else { FIXME("-- expected clipformat not implemented\n"); return (E_INVALIDARG); } if (pmedium->u.hGlobal) { pmedium->tymed = TYMED_HGLOBAL; pmedium->pUnkForRelease = NULL; return S_OK; } return E_OUTOFMEMORY; }
/************************************************************************** * DoCopyOrCut * * copies the currently selected items into the clipboard */ static BOOL DoCopyOrCut( IContextMenu *iface, HWND hwnd, BOOL bCut) { ICOM_THIS(ItemCmImpl, iface); LPSHELLBROWSER lpSB; LPSHELLVIEW lpSV; LPDATAOBJECT lpDo; TRACE("(%p)->(wnd=0x%04x,bCut=0x%08x)\n",This, hwnd, bCut); if(GetShellOle()) { /* get the active IShellView */ if ((lpSB = (LPSHELLBROWSER)SendMessageA(hwnd, CWM_GETISHELLBROWSER,0,0))) { if (SUCCEEDED(IShellBrowser_QueryActiveShellView(lpSB, &lpSV))) { if (SUCCEEDED(IShellView_GetItemObject(lpSV, SVGIO_SELECTION, &IID_IDataObject, (LPVOID*)&lpDo))) { pOleSetClipboard(lpDo); IDataObject_Release(lpDo); } IShellView_Release(lpSV); } } } return TRUE; #if 0 /* the following code does the copy operation witout ole32.dll we might need this possibility too (js) */ BOOL bSuccess = FALSE; TRACE("(%p)\n", iface); if(OpenClipboard(NULL)) { if(EmptyClipboard()) { IPersistFolder2 * ppf2; IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppf2); if (ppf2) { LPITEMIDLIST pidl; IPersistFolder2_GetCurFolder(ppf2, &pidl); if(pidl) { HGLOBAL hMem; hMem = RenderHDROP(pidl, This->apidl, This->cidl); if(SetClipboardData(CF_HDROP, hMem)) { bSuccess = TRUE; } SHFree(pidl); } IPersistFolder2_Release(ppf2); } } CloseClipboard(); } return bSuccess; #endif }