1 /* 2 * This library is free software; you can redistribute it and/or 3 * modify it under the terms of the GNU Lesser General Public 4 * License as published by the Free Software Foundation; either 5 * version 2.1 of the License, or (at your option) any later version. 6 * 7 * This library is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 10 * Lesser General Public License for more details. 11 * 12 * You should have received a copy of the GNU Lesser General Public 13 * License along with this library; if not, write to the Free Software 14 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 15 */ 16 17 #ifndef __ENUMIDLIST_H__ 18 #define __ENUMIDLIST_H__ 19 20 struct ENUMLIST 21 { 22 ENUMLIST *pNext; 23 LPITEMIDLIST pidl; 24 }; 25 26 class CEnumIDListBase : 27 public CComObjectRootEx<CComMultiThreadModelNoCS>, 28 public IEnumIDList 29 { 30 private: 31 ENUMLIST *mpFirst; 32 ENUMLIST *mpLast; 33 ENUMLIST *mpCurrent; 34 public: 35 CEnumIDListBase(); 36 virtual ~CEnumIDListBase(); 37 BOOL AddToEnumList(LPITEMIDLIST pidl); 38 BOOL DeleteList(); 39 BOOL HasItemWithCLSID(LPITEMIDLIST pidl); 40 HRESULT AppendItemsFromEnumerator(IEnumIDList* pEnum); 41 42 // *** IEnumIDList methods *** 43 virtual HRESULT STDMETHODCALLTYPE Next(ULONG celt, LPITEMIDLIST *rgelt, ULONG *pceltFetched); 44 virtual HRESULT STDMETHODCALLTYPE Skip(ULONG celt); 45 virtual HRESULT STDMETHODCALLTYPE Reset(); 46 virtual HRESULT STDMETHODCALLTYPE Clone(IEnumIDList **ppenum); 47 48 BEGIN_COM_MAP(CEnumIDListBase) 49 COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) 50 END_COM_MAP() 51 }; 52 53 #endif /* __ENUMIDLIST_H__ */ 54