|
|
#ifndef __IDLDATA_H__
#define __IDLDATA_H__
#include "idlcomm.h"
#define MAX_FORMATS ICF_MAX
STDAPI CIDLData_CreateInstance(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST apidl[], IDataObject *pdtInner, IDataObject **ppdtobj);
class CIDLDataObj : public IDataObject, public IAsyncOperation { friend HRESULT CIDLData_CreateInstance(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST apidl[], IDataObject *pdtInner, IDataObject **ppdtobj); protected: CIDLDataObj(IDataObject *pdtInner); CIDLDataObj(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST apidl[]); CIDLDataObj(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST apidl[], IDataObject *pdtInner); virtual ~CIDLDataObj(void);
public: void InitIDLData1(IDataObject *pdtInner); void InitIDLData2(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST apidl[]);
// IUnknown
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
// IDataObject
STDMETHODIMP GetData(FORMATETC *pFmtEtc, STGMEDIUM *pstm); STDMETHODIMP GetDataHere(FORMATETC *pFmtEtc, STGMEDIUM *pstm); STDMETHODIMP QueryGetData(FORMATETC *pFmtEtc); STDMETHODIMP GetCanonicalFormatEtc(FORMATETC *pFmtEtcIn, FORMATETC *pFmtEtcOut); STDMETHODIMP SetData(FORMATETC *pFmtEtc, STGMEDIUM *pstm, BOOL fRelease); STDMETHODIMP EnumFormatEtc(DWORD dwDirection, LPENUMFORMATETC *ppEnum); STDMETHODIMP DAdvise(FORMATETC *pFmtEtc, DWORD grfAdv, LPADVISESINK pAdvSink, DWORD *pdwConnection); STDMETHODIMP DUnadvise(DWORD dwConnection); STDMETHODIMP EnumDAdvise(LPENUMSTATDATA *ppEnum);
// IAsyncOperation
STDMETHODIMP SetAsyncMode(BOOL fDoOpAsync); STDMETHODIMP GetAsyncMode(BOOL *pfIsOpAsync); STDMETHODIMP StartOperation(IBindCtx * pbc); STDMETHODIMP InOperation(BOOL * pfInAsyncOp); STDMETHODIMP EndOperation(HRESULT hResult, IBindCtx * pbc, DWORD dwEffects);
private: LONG _cRef; IDataObject *_pdtInner; IUnknown *_punkThread; BOOL _fEnumFormatCalled; // TRUE once called.
BOOL _fDidAsynchStart; FORMATETC _fmte[MAX_FORMATS]; STGMEDIUM _medium[MAX_FORMATS]; };
#endif
|