windows-nt/Source/XPSP1/NT/shell/shell32/idldata.h
2020-09-26 16:20:57 +08:00

56 lines
2.1 KiB
C++

#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