Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.1 KiB

  1. /* Copyright 1996 Microsoft */
  2. #ifndef _ACLMULTI_H_
  3. #define _ACLMULTI_H_
  4. //
  5. // CACLMulti is an AutoComplete List that simply contains
  6. // other AutoComplete Lists. Objects are added via IObjMgr
  7. // methods, and each IEnumString method is
  8. // just passed on to each sub list in turn.
  9. //
  10. class CACLMulti
  11. : public IEnumACString
  12. , public IObjMgr
  13. , public IACList
  14. {
  15. public:
  16. //////////////////////////////////////////////////////
  17. // Public Interfaces
  18. //////////////////////////////////////////////////////
  19. // *** IUnknown ***
  20. virtual STDMETHODIMP_(ULONG) AddRef(void);
  21. virtual STDMETHODIMP_(ULONG) Release(void);
  22. virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObj);
  23. // *** IEnumString ***
  24. virtual STDMETHODIMP Next(ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched);
  25. virtual STDMETHODIMP Skip(ULONG celt);
  26. virtual STDMETHODIMP Reset(void);
  27. virtual STDMETHODIMP Clone(IEnumString **ppenum);
  28. // *** IEnumACString **
  29. virtual STDMETHODIMP NextItem(LPOLESTR pszUrl, ULONG cchMax, ULONG* pulSortIndex);
  30. virtual STDMETHODIMP SetEnumOptions(DWORD dwOptions) { return E_NOTIMPL; };
  31. virtual STDMETHODIMP GetEnumOptions(DWORD *pdwOptions) { return E_NOTIMPL; };
  32. // *** IObjMgr ***
  33. virtual STDMETHODIMP Append(IUnknown *punk);
  34. virtual STDMETHODIMP Remove(IUnknown *punk);
  35. // *** IACList ***
  36. virtual STDMETHODIMP Expand(LPCOLESTR pszExpand);
  37. protected:
  38. // Constructor / Destructor (protected so we can't create on stack)
  39. CACLMulti(void);
  40. ~CACLMulti(void);
  41. // Instance creator
  42. friend HRESULT CACLMulti_CreateInstance(IUnknown *punkOuter, IUnknown **ppunk, LPCOBJECTINFO poi);
  43. friend HRESULT CACLMulti_Create(IEnumString **ppenum, CACLMulti * paclMultiToCopy);
  44. // Private variables
  45. DWORD _cRef; // COM reference count
  46. int _iSubList; // Current sublist for Next() operations
  47. HDSA _hdsa; // HDSA of sublists
  48. // Private methods
  49. static int _FreeListItem(LPVOID p, LPVOID d);
  50. };
  51. #endif // _ACLMULTI_H_