implementation of IDataObject interface More...
#include <dragdropimpl.h>


Public Member Functions | |
| IDataObjectImpl (IDropSourceImpl *pDropSource) | |
| virtual | ~IDataObjectImpl () |
| void | CopyMedium (STGMEDIUM *pMedDest, STGMEDIUM *pMedSrc, FORMATETC *pFmtSrc) |
| virtual HRESULT STDMETHODCALLTYPE | GetData (FORMATETC __RPC_FAR *pformatetcIn, STGMEDIUM __RPC_FAR *pmedium) |
| virtual HRESULT STDMETHODCALLTYPE | GetDataHere (FORMATETC __RPC_FAR *pformatetc, STGMEDIUM __RPC_FAR *pmedium) |
| virtual HRESULT STDMETHODCALLTYPE | QueryGetData (FORMATETC __RPC_FAR *pformatetc) |
| virtual HRESULT STDMETHODCALLTYPE | GetCanonicalFormatEtc (FORMATETC __RPC_FAR *pformatectIn, FORMATETC __RPC_FAR *pformatetcOut) |
| virtual HRESULT STDMETHODCALLTYPE | SetData (FORMATETC __RPC_FAR *pformatetc, STGMEDIUM __RPC_FAR *pmedium, BOOL fRelease) |
| virtual HRESULT STDMETHODCALLTYPE | EnumFormatEtc (DWORD dwDirection, IEnumFORMATETC __RPC_FAR *__RPC_FAR *ppenumFormatEtc) |
| virtual HRESULT STDMETHODCALLTYPE | DAdvise (FORMATETC __RPC_FAR *pformatetc, DWORD advf, IAdviseSink __RPC_FAR *pAdvSink, DWORD __RPC_FAR *pdwConnection) |
| virtual HRESULT STDMETHODCALLTYPE | DUnadvise (DWORD dwConnection) |
| virtual HRESULT STDMETHODCALLTYPE | EnumDAdvise (IEnumSTATDATA __RPC_FAR *__RPC_FAR *ppenumAdvise) |
implementation of IDataObject interface
Definition at line 79 of file dragdropimpl.h.
| IDataObjectImpl::IDataObjectImpl | ( | IDropSourceImpl * | pDropSource ) |
Definition at line 24 of file dragdropimpl.cpp.
: super(IID_IDataObject),
m_pDropSource(pDropSource),
m_cRefCount(0)
{
}
| IDataObjectImpl::~IDataObjectImpl | ( | ) | [virtual] |
Definition at line 31 of file dragdropimpl.cpp.
{
for(StorageArray::iterator it=_storage.begin(); it!=_storage.end(); ++it)
ReleaseStgMedium(it->_medium);
}
| void IDataObjectImpl::CopyMedium | ( | STGMEDIUM * | pMedDest, |
| STGMEDIUM * | pMedSrc, | ||
| FORMATETC * | pFmtSrc | ||
| ) |
Definition at line 140 of file dragdropimpl.cpp.
Referenced by GetData(), and SetData().
{
switch(pMedSrc->tymed)
{
case TYMED_HGLOBAL:
pMedDest->hGlobal = (HGLOBAL)OleDuplicateData(pMedSrc->hGlobal, pFmtSrc->cfFormat, 0);
break;
case TYMED_GDI:
pMedDest->hBitmap = (HBITMAP)OleDuplicateData(pMedSrc->hBitmap, pFmtSrc->cfFormat, 0);
break;
case TYMED_MFPICT:
pMedDest->hMetaFilePict = (HMETAFILEPICT)OleDuplicateData(pMedSrc->hMetaFilePict, pFmtSrc->cfFormat, 0);
break;
case TYMED_ENHMF:
pMedDest->hEnhMetaFile = (HENHMETAFILE)OleDuplicateData(pMedSrc->hEnhMetaFile, pFmtSrc->cfFormat, 0);
break;
case TYMED_FILE:
pMedDest->lpszFileName = (LPOLESTR)OleDuplicateData(pMedSrc->lpszFileName, pFmtSrc->cfFormat, 0);
break;
case TYMED_ISTREAM:
pMedDest->pstm = pMedSrc->pstm;
pMedSrc->pstm->AddRef();
break;
case TYMED_ISTORAGE:
pMedDest->pstg = pMedSrc->pstg;
pMedSrc->pstg->AddRef();
break;
case TYMED_NULL:
default:
break;
}
pMedDest->tymed = pMedSrc->tymed;
pMedDest->pUnkForRelease = pMedSrc->pUnkForRelease;
}

| STDMETHODIMP IDataObjectImpl::DAdvise | ( | FORMATETC __RPC_FAR * | pformatetc, |
| DWORD | advf, | ||
| IAdviseSink __RPC_FAR * | pAdvSink, | ||
| DWORD __RPC_FAR * | pdwConnection | ||
| ) | [virtual] |
Definition at line 203 of file dragdropimpl.cpp.
{
return OLE_E_ADVISENOTSUPPORTED;
}
| STDMETHODIMP IDataObjectImpl::DUnadvise | ( | DWORD | dwConnection ) | [virtual] |
Definition at line 212 of file dragdropimpl.cpp.
{
return E_NOTIMPL;
}
| HRESULT STDMETHODCALLTYPE IDataObjectImpl::EnumDAdvise | ( | IEnumSTATDATA __RPC_FAR *__RPC_FAR * | ppenumAdvise ) | [virtual] |
Definition at line 218 of file dragdropimpl.cpp.
{
return OLE_E_ADVISENOTSUPPORTED;
}
| STDMETHODIMP IDataObjectImpl::EnumFormatEtc | ( | DWORD | dwDirection, |
| IEnumFORMATETC __RPC_FAR *__RPC_FAR * | ppenumFormatEtc | ||
| ) | [virtual] |
Definition at line 175 of file dragdropimpl.cpp.
{
if (ppenumFormatEtc == NULL)
return E_POINTER;
*ppenumFormatEtc=NULL;
switch (dwDirection)
{
case DATADIR_GET:
*ppenumFormatEtc = new EnumFormatEtcImpl(_storage);
if (!*ppenumFormatEtc)
return E_OUTOFMEMORY;
(*ppenumFormatEtc)->AddRef();
break;
case DATADIR_SET:
default:
return E_NOTIMPL;
break;
}
return S_OK;
}
| STDMETHODIMP IDataObjectImpl::GetCanonicalFormatEtc | ( | FORMATETC __RPC_FAR * | pformatectIn, |
| FORMATETC __RPC_FAR * | pformatetcOut | ||
| ) | [virtual] |
Definition at line 95 of file dragdropimpl.cpp.
{
if (pformatetcOut == NULL)
return E_INVALIDARG;
return DATA_S_SAMEFORMATETC;
}
| STDMETHODIMP IDataObjectImpl::GetData | ( | FORMATETC __RPC_FAR * | pformatetcIn, |
| STGMEDIUM __RPC_FAR * | pmedium | ||
| ) | [virtual] |
Definition at line 37 of file dragdropimpl.cpp.
References CopyMedium().
{
if (pformatetcIn == NULL || pmedium == NULL)
return E_INVALIDARG;
pmedium->hGlobal = NULL;
for(StorageArray::iterator it=_storage.begin(); it!=_storage.end(); ++it)
{
if (pformatetcIn->tymed & it->_format->tymed &&
pformatetcIn->dwAspect == it->_format->dwAspect &&
pformatetcIn->cfFormat == it->_format->cfFormat)
{
CopyMedium(pmedium, it->_medium, it->_format);
return S_OK;
}
}
return DV_E_FORMATETC;
}

| STDMETHODIMP IDataObjectImpl::GetDataHere | ( | FORMATETC __RPC_FAR * | pformatetc, |
| STGMEDIUM __RPC_FAR * | pmedium | ||
| ) | [virtual] |
Definition at line 60 of file dragdropimpl.cpp.
{
return E_NOTIMPL;
}
| STDMETHODIMP IDataObjectImpl::QueryGetData | ( | FORMATETC __RPC_FAR * | pformatetc ) | [virtual] |
Definition at line 67 of file dragdropimpl.cpp.
{
if (pformatetc == NULL)
return E_INVALIDARG;
//support others if needed DVASPECT_THUMBNAIL //DVASPECT_ICON //DVASPECT_DOCPRINT
if (!(DVASPECT_CONTENT & pformatetc->dwAspect))
return (DV_E_DVASPECT);
HRESULT hr = DV_E_TYMED;
for(StorageArray::iterator it=_storage.begin(); it!=_storage.end(); ++it)
{
if (pformatetc->tymed & it->_format->tymed)
{
if (pformatetc->cfFormat == it->_format->cfFormat)
return S_OK;
else
hr = DV_E_CLIPFORMAT;
}
else
hr = DV_E_TYMED;
}
return hr;
}
| STDMETHODIMP IDataObjectImpl::SetData | ( | FORMATETC __RPC_FAR * | pformatetc, |
| STGMEDIUM __RPC_FAR * | pmedium, | ||
| BOOL | fRelease | ||
| ) | [virtual] |
Definition at line 105 of file dragdropimpl.cpp.
References DataStorage::_format, DataStorage::_medium, and CopyMedium().
{
if (pformatetc == NULL || pmedium == NULL)
return E_INVALIDARG;
assert(pformatetc->tymed == pmedium->tymed);
FORMATETC* fetc=new FORMATETC;
STGMEDIUM* pStgMed = new STGMEDIUM;
if (fetc == NULL || pStgMed == NULL)
return E_OUTOFMEMORY;
ZeroMemory(fetc, sizeof(FORMATETC));
ZeroMemory(pStgMed, sizeof(STGMEDIUM));
*fetc = *pformatetc;
if (fRelease)
*pStgMed = *pmedium;
else
CopyMedium(pStgMed, pmedium, pformatetc);
DataStorage storage;
storage._format = fetc;
storage._medium = pStgMed;
_storage.push_back(storage);
return S_OK;
}

|
ROS Explorer Source Code Documentation
generated on 02.01.2013 by
|