/*****************************************************************************\ FILE: ftpefe.h \*****************************************************************************/ #ifndef _FTPEFE_H #define _FTPEFE_H /*****************************************************************************\ CLASS: CFtpEfe DESCRIPTION: The stuff that tracks the state of an enumeration. \*****************************************************************************/ class CFtpEfe : public IEnumFORMATETC { public: ////////////////////////////////////////////////////// // Public Interfaces ////////////////////////////////////////////////////// // *** IUnknown *** virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void); virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); // *** IEnumFORMATETC *** virtual STDMETHODIMP Next(ULONG celt, FORMATETC * rgelt, ULONG *pceltFetched); virtual STDMETHODIMP Skip(ULONG celt); virtual STDMETHODIMP Reset(void); virtual STDMETHODIMP Clone(IEnumFORMATETC **ppenum); public: // Friend Functions friend HRESULT CFtpEfe_Create(DWORD dwSize, FORMATETC rgfe[], STGMEDIUM rgstg[], CFtpObj * pfo, IEnumFORMATETC ** ppenum); protected: // Private Member Variables int m_cRef; DWORD m_dwIndex; // Current Item in the m_hdsaFormatEtc list DWORD m_dwExtraIndex; // Current Item in the m_pfo->m_hdsaSetData list HDSA m_hdsaFormatEtc; // pointer to the array CFtpObj * m_pfo; // pointer to the parent IDataObject impl that has the list of extra data from ::SetData. CFtpEfe(DWORD dwSize, FORMATETC rgfe[], STGMEDIUM rgstg[], CFtpObj * pfo); CFtpEfe(DWORD dwSize, HDSA hdsaFormatEtc, CFtpObj * pfo, DWORD dwIndex); ~CFtpEfe(void); // Public Member Functions HRESULT _NextOne(FORMATETC * pfetc); // Friend Functions friend HRESULT CFtpEfe_Create(DWORD dwSize, HDSA m_hdsaFormatEtc, DWORD dwIndex, CFtpObj * pfo, IEnumFORMATETC ** ppenum); friend HRESULT CFtpEfe_Create(DWORD dwSize, FORMATETC rgfe[], STGMEDIUM rgstg[], CFtpObj * pfo, CFtpEfe ** ppfefe); }; #endif // _FTPEFE_H