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 ![]() |