//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: idldata.h // //-------------------------------------------------------------------------- #ifndef _INC_SHELL_IDLDATA_H #define _INC_SHELL_IDLDATA_H #include "fmtetc.h" // // Clipboard Format for IDLData object. // #define ICFHDROP 0 #define ICFFILENAME 1 #define ICFNETRESOURCE 2 #define ICFFILECONTENTS 3 #define ICFFILEGROUPDESCRIPTORA 4 #define ICFFILENAMEMAPW 5 #define ICFFILENAMEMAP 6 #define ICFHIDA 7 #define ICFOFFSETS 8 #define ICFPRINTERFRIENDLYNAME 9 #define ICFPRIVATESHELLDATA 10 #define ICFHTML 11 #define ICFFILENAMEW 12 #define ICFFILEGROUPDESCRIPTORW 13 #define ICFPREFERREDDROPEFFECT 14 #define ICFPERFORMEDDROPEFFECT 15 #define ICFLOGICALPERFORMEDDROPEFFECT 16 #define ICFSHELLURL 17 #define ICFINDRAGLOOP 18 #define ICF_DRAGCONTEXT 19 #define ICF_TARGETCLSID 20 #define ICF_MAX 21 #define g_cfNetResource CIDLData::m_rgcfGlobal[ICFNETRESOURCE] #define g_cfHIDA CIDLData::m_rgcfGlobal[ICFHIDA] #define g_cfOFFSETS CIDLData::m_rgcfGlobal[ICFOFFSETS] #define g_cfPrinterFriendlyName CIDLData::m_rgcfGlobal[ICFPRINTERFRIENDLYNAME] #define g_cfFileName CIDLData::m_rgcfGlobal[ICFFILENAME] #define g_cfFileContents CIDLData::m_rgcfGlobal[ICFFILECONTENTS] #define g_cfFileGroupDescriptorA CIDLData::m_rgcfGlobal[ICFFILEGROUPDESCRIPTORA] #define g_cfFileGroupDescriptorW CIDLData::m_rgcfGlobal[ICFFILEGROUPDESCRIPTORW] #define g_cfFileNameMapW CIDLData::m_rgcfGlobal[ICFFILENAMEMAPW] #define g_cfFileNameMapA CIDLData::m_rgcfGlobal[ICFFILENAMEMAP] #define g_cfPrivateShellData CIDLData::m_rgcfGlobal[ICFPRIVATESHELLDATA] #define g_cfHTML CIDLData::m_rgcfGlobal[ICFHTML] #define g_cfFileNameW CIDLData::m_rgcfGlobal[ICFFILENAMEW] #define g_cfPreferredDropEffect CIDLData::m_rgcfGlobal[ICFPREFERREDDROPEFFECT] #define g_cfPerformedDropEffect CIDLData::m_rgcfGlobal[ICFPERFORMEDDROPEFFECT] #define g_cfLogicalPerformedDropEffect CIDLData::m_rgcfGlobal[ICFLOGICALPERFORMEDDROPEFFECT] #define g_cfShellURL CIDLData::m_rgcfGlobal[ICFSHELLURL] #define g_cfInDragLoop CIDLData::m_rgcfGlobal[ICFINDRAGLOOP] #define g_cfDragContext CIDLData::m_rgcfGlobal[ICF_DRAGCONTEXT] #define g_cfTargetCLSID CIDLData::m_rgcfGlobal[ICF_TARGETCLSID] // Most places will only generate one so minimize the number of changes in the code (bad idea!) #ifdef UNICODE #define g_cfFileNameMap g_cfFileNameMapW #else #define g_cfFileNameMap g_cfFileNameMapA #endif class CIDLData : public IDataObject { public: CIDLData(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST *apidl, IShellFolder *psfOwner = NULL, IDataObject *pdtInner = NULL); virtual ~CIDLData(void); // // IUnknown methods. // STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // // IDataObject methods. // 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); static HRESULT CreateInstance(IDataObject **ppOut, LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST *apidl, IShellFolder *psfOwner = NULL, IDataObject *pdtInner = NULL); static HRESULT CreateInstance(CIDLData **ppOut, LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST *apidl, IShellFolder *psfOwner = NULL, IDataObject *pdtInner = NULL); void InitializeClipboardFormats(void); HRESULT Clone(UINT *acf, UINT ccf, IDataObject **ppdtobjOut); HRESULT CloneForMoveCopy(IDataObject **ppdtobjOut); HRESULT CtorResult(void) const { return m_hrCtor; } virtual IShellFolder *GetFolder(void) const; protected: // // These are defined for compatibility with the original shell code. // enum { MAX_FORMATS = ICF_MAX }; LONG m_cRef; IShellFolder *m_psfOwner; DWORD m_dwOwnerData; HRESULT m_hrCtor; IDataObject *m_pdtobjInner; FORMATETC m_rgFmtEtc[MAX_FORMATS]; STGMEDIUM m_rgMedium[MAX_FORMATS]; bool m_bEnumFormatCalled; static CLIPFORMAT m_rgcfGlobal[ICF_MAX]; static const LARGE_INTEGER m_LargeIntZero; virtual HRESULT ProvideFormats(CEnumFormatEtc *pEnumFormatEtc); private: typedef HGLOBAL HIDA; HIDA HIDA_Create(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST *apidl); // // Prevent copy. // CIDLData(const CIDLData& rhs); CIDLData& operator = (const CIDLData& rhs); }; #endif _INC_SHELL_IDLDATA_H