return (*ppenum)->Skip(posFmt);
}
-HRESULT IEnumFORMATETC_Constructor(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **enumerator)
+HRESULT IEnumFORMATETC_Constructor(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **ppFormat)
{
- CComObject<IEnumFORMATETCImpl> *theEnumerator;
- CComPtr<IEnumFORMATETC> result;
- HRESULT hResult;
-
- if (enumerator == NULL)
- return E_POINTER;
- *enumerator = NULL;
- ATLTRY (theEnumerator = new CComObject<IEnumFORMATETCImpl>);
- if (theEnumerator == NULL)
- return E_OUTOFMEMORY;
- hResult = theEnumerator->QueryInterface (IID_PPV_ARG(IEnumFORMATETC, &result));
- if (FAILED (hResult))
- {
- delete theEnumerator;
- return hResult;
- }
- hResult = theEnumerator->Initialize (cfmt, afmt);
- if (FAILED (hResult))
- return hResult;
- *enumerator = result.Detach ();
- TRACE("(%p)->(%u,%p)\n", *enumerator, cfmt, afmt);
- return S_OK;
+ return ShellObjectCreatorInit<IEnumFORMATETCImpl>(cfmt, afmt, IID_IEnumFORMATETC, ppFormat);
}
/* number of supported formats */
#define MAX_FORMATS 5
-class IDataObjectImpl :
+class CIDLDataObj :
public CComObjectRootEx<CComMultiThreadModelNoCS>,
public IDataObject,
public IAsyncOperation
UINT cfPreferredDropEffect;
BOOL doasync;
public:
- IDataObjectImpl();
- ~IDataObjectImpl();
+ CIDLDataObj();
+ ~CIDLDataObj();
HRESULT WINAPI Initialize(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidlx, UINT cidlx);
///////////
virtual HRESULT WINAPI StartOperation(IBindCtx *pbcReserved);
virtual HRESULT WINAPI EndOperation(HRESULT hResult, IBindCtx *pbcReserved, DWORD dwEffects);
-BEGIN_COM_MAP(IDataObjectImpl)
+BEGIN_COM_MAP(CIDLDataObj)
COM_INTERFACE_ENTRY_IID(IID_IDataObject, IDataObject)
COM_INTERFACE_ENTRY_IID(IID_IAsyncOperation, IAsyncOperation)
END_COM_MAP()
};
-IDataObjectImpl::IDataObjectImpl()
+CIDLDataObj::CIDLDataObj()
{
pidl = NULL;
apidl = NULL;
doasync = FALSE;
}
-IDataObjectImpl::~IDataObjectImpl()
+CIDLDataObj::~CIDLDataObj()
{
TRACE(" destroying IDataObject(%p)\n",this);
_ILFreeaPidl(apidl, cidl);
ILFree(pidl);
}
-HRESULT WINAPI IDataObjectImpl::Initialize(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidlx, UINT cidlx)
+HRESULT WINAPI CIDLDataObj::Initialize(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidlx, UINT cidlx)
{
pidl = ILClone(pMyPidl);
apidl = _ILCopyaPidl(apidlx, cidlx);
return S_OK;
}
+static HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags)
+{
+ DWORD * pdwFlag;
+ HGLOBAL hGlobal;
+
+ TRACE("(0x%08x)\n", dwFlags);
+
+ hGlobal = GlobalAlloc(GHND|GMEM_SHARE, sizeof(DWORD));
+ if(!hGlobal) return hGlobal;
+ pdwFlag = (DWORD*)GlobalLock(hGlobal);
+ *pdwFlag = dwFlags;
+ GlobalUnlock(hGlobal);
+ return hGlobal;
+}
+
/**************************************************************************
* IDataObject_fnGetData
*/
-HRESULT WINAPI IDataObjectImpl::GetData(LPFORMATETC pformatetcIn, STGMEDIUM *pmedium)
+HRESULT WINAPI CIDLDataObj::GetData(LPFORMATETC pformatetcIn, STGMEDIUM *pmedium)
{
char szTemp[256];
return E_OUTOFMEMORY;
}
-HRESULT WINAPI IDataObjectImpl::GetDataHere(LPFORMATETC pformatetc, STGMEDIUM *pmedium)
+HRESULT WINAPI CIDLDataObj::GetDataHere(LPFORMATETC pformatetc, STGMEDIUM *pmedium)
{
FIXME("(%p)->()\n", this);
return E_NOTIMPL;
}
-HRESULT WINAPI IDataObjectImpl::QueryGetData(LPFORMATETC pformatetc)
+HRESULT WINAPI CIDLDataObj::QueryGetData(LPFORMATETC pformatetc)
{
UINT i;
return DV_E_TYMED;
}
-HRESULT WINAPI IDataObjectImpl::GetCanonicalFormatEtc(LPFORMATETC pformatectIn, LPFORMATETC pformatetcOut)
+HRESULT WINAPI CIDLDataObj::GetCanonicalFormatEtc(LPFORMATETC pformatectIn, LPFORMATETC pformatetcOut)
{
FIXME("(%p)->()\n", this);
return E_NOTIMPL;
}
-HRESULT WINAPI IDataObjectImpl::SetData(LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
+HRESULT WINAPI CIDLDataObj::SetData(LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
{
if (pformatetc->cfFormat == cfPreferredDropEffect)
{
return E_NOTIMPL;
}
-HRESULT WINAPI IDataObjectImpl::EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
+HRESULT WINAPI CIDLDataObj::EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
{
TRACE("(%p)->()\n", this);
*ppenumFormatEtc = NULL;
return E_NOTIMPL;
}
-HRESULT WINAPI IDataObjectImpl::DAdvise(FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
+HRESULT WINAPI CIDLDataObj::DAdvise(FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
{
FIXME("(%p)->()\n", this);
return E_NOTIMPL;
}
-HRESULT WINAPI IDataObjectImpl::DUnadvise(DWORD dwConnection)
+HRESULT WINAPI CIDLDataObj::DUnadvise(DWORD dwConnection)
{
FIXME("(%p)->()\n", this);
return E_NOTIMPL;
}
-HRESULT WINAPI IDataObjectImpl::EnumDAdvise(IEnumSTATDATA **ppenumAdvise)
+HRESULT WINAPI CIDLDataObj::EnumDAdvise(IEnumSTATDATA **ppenumAdvise)
{
FIXME("(%p)->()\n", this);
return E_NOTIMPL;
}
-HRESULT WINAPI IDataObjectImpl::GetAsyncMode(BOOL *pfIsOpAsync)
+HRESULT WINAPI CIDLDataObj::GetAsyncMode(BOOL *pfIsOpAsync)
{
TRACE("(%p)->()\n", this);
*pfIsOpAsync = doasync;
return S_OK;
}
-HRESULT WINAPI IDataObjectImpl::InOperation(BOOL *pfInAsyncOp)
+HRESULT WINAPI CIDLDataObj::InOperation(BOOL *pfInAsyncOp)
{
FIXME("(%p)->()\n", this);
return E_NOTIMPL;
}
-HRESULT WINAPI IDataObjectImpl::SetAsyncMode(BOOL fDoOpAsync)
+HRESULT WINAPI CIDLDataObj::SetAsyncMode(BOOL fDoOpAsync)
{
TRACE("(%p)->()\n", this);
doasync = fDoOpAsync;
return S_OK;
}
-HRESULT WINAPI IDataObjectImpl::StartOperation(IBindCtx *pbcReserved)
+HRESULT WINAPI CIDLDataObj::StartOperation(IBindCtx *pbcReserved)
{
FIXME("(%p)->()\n", this);
return E_NOTIMPL;
}
-HRESULT WINAPI IDataObjectImpl::EndOperation(HRESULT hResult, IBindCtx *pbcReserved, DWORD dwEffects)
+HRESULT WINAPI CIDLDataObj::EndOperation(HRESULT hResult, IBindCtx *pbcReserved, DWORD dwEffects)
{
FIXME("(%p)->()\n", this);
return E_NOTIMPL;
*/
HRESULT IDataObject_Constructor(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidl, UINT cidl, IDataObject **dataObject)
{
- CComObject<IDataObjectImpl> *theDataObject;
- CComPtr<IDataObject> result;
- HRESULT hResult;
-
- if (dataObject == NULL)
- return E_POINTER;
- *dataObject = NULL;
- ATLTRY (theDataObject = new CComObject<IDataObjectImpl>);
- if (theDataObject == NULL)
- return E_OUTOFMEMORY;
- hResult = theDataObject->QueryInterface(IID_PPV_ARG(IDataObject, &result));
- if (FAILED (hResult))
- {
- delete theDataObject;
- return hResult;
- }
- hResult = theDataObject->Initialize (hwndOwner, pMyPidl, apidl, cidl);
- if (FAILED (hResult))
- return hResult;
- *dataObject = result.Detach ();
- TRACE("(%p)->(apidl=%p cidl=%u)\n", *dataObject, apidl, cidl);
- return S_OK;
+ return ShellObjectCreatorInit<CIDLDataObj>(hwndOwner, pMyPidl, apidl, cidl, IID_IDataObject, dataObject);
}
/*************************************************************************