proxyisf.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 4k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef _PROXYISF_H_
  2. #define _PROXYISF_H_
  3. #include "iface.h"
  4. // Host Proxy IShellFolder Object.  It wraps a single object that supports
  5. // IShellFolder and forwards all methods to that object.  It takes 
  6. // first dibs at responding to GetUIObjectOf, so it can provide more
  7. // objects via this method.
  8. //
  9. // Win95 Shell32 does not support aggregation.  So this cannot fully
  10. // aggregate the wrapped object.  Because of this, we implement the 
  11. // same interfaces that CFSFolder implements so we at least support
  12. // that.
  13. //
  14. class CHostProxyISF : public IProxyShellFolder,
  15.                       public IShellIcon,
  16.                       public IPersistFolder,
  17.                       public IShellService
  18. {
  19.     
  20. public:
  21.     // *** IUnknown methods ***
  22.     virtual STDMETHODIMP QueryInterface(REFIID,void **);
  23.     virtual STDMETHODIMP_(ULONG) AddRef(void);
  24.     virtual STDMETHODIMP_(ULONG) Release(void);
  25.     
  26.     // *** IShellFolder methods ***
  27.     virtual STDMETHODIMP ParseDisplayName(HWND hwndOwner,
  28.                                 LPBC pbcReserved, LPOLESTR lpszDisplayName,
  29.                                 ULONG * pchEaten, LPITEMIDLIST * ppidl, ULONG *pdwAttributes);
  30.     virtual STDMETHODIMP EnumObjects( THIS_ HWND hwndOwner, DWORD grfFlags, LPENUMIDLIST * ppenumIDList);
  31.     virtual STDMETHODIMP BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved,
  32.                                 REFIID riid, LPVOID * ppvOut);
  33.     virtual STDMETHODIMP BindToStorage(LPCITEMIDLIST pidl, LPBC pbcReserved,
  34.                                 REFIID riid, LPVOID * ppvObj);
  35.     virtual STDMETHODIMP CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
  36.     virtual STDMETHODIMP CreateViewObject (HWND hwndOwner, REFIID riid, LPVOID * ppvOut);
  37.     virtual STDMETHODIMP GetAttributesOf(UINT cidl, LPCITEMIDLIST * apidl,
  38.                                 ULONG * rgfInOut);
  39.     virtual STDMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl,
  40.                                 REFIID riid, UINT * prgfInOut, LPVOID * ppvOut);
  41.     virtual STDMETHODIMP GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD uFlags, LPSTRRET lpName);
  42.     virtual STDMETHODIMP SetNameOf(HWND hwndOwner, LPCITEMIDLIST pidl,
  43.                                 LPCOLESTR lpszName, DWORD uFlags,
  44.                                 LPITEMIDLIST * ppidlOut);
  45.     // *** IShellIcon methods ***
  46.     virtual STDMETHODIMP GetIconOf(LPCITEMIDLIST pidl, UINT flags, LPINT lpIconIndex);
  47.     // *** IPersist methods ***
  48.     virtual STDMETHODIMP GetClassID(LPCLSID lpClassID);
  49.     // *** IPersistFolder methods ***
  50.     virtual STDMETHODIMP Initialize(LPCITEMIDLIST pidl);
  51.     // *** IShellService methods ***
  52.     virtual STDMETHODIMP SetOwner(IUnknown * punkOwner);
  53.     // *** IProxyShellFolder methods ***
  54.     virtual STDMETHODIMP InitHostProxy(IShellFolder * psf, LPCITEMIDLIST pidl, DWORD dwFlags);
  55.     // *** Other methods to be implemented by derived class ***
  56.     virtual STDMETHODIMP CloneProxyPSF(REFIID riid, LPVOID * ppvObj) PURE;
  57.     virtual STDMETHODIMP GetUIObjectOfPSF(HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl,
  58.                                       REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) PURE;
  59.     virtual STDMETHODIMP CreateViewObjectPSF(HWND hwndOwner, REFIID riid, LPVOID * ppvOut) PURE;
  60.     virtual STDMETHODIMP SetOwnerPSF(IUnknown * punkOwner) PURE;
  61. protected:
  62.     CHostProxyISF();
  63.     virtual ~CHostProxyISF();
  64.     int             _cRef;
  65.     DWORD           _dwFlags;           // SPF_*
  66.     IShellFolder *  _psf;
  67.     LPITEMIDLIST    _pidl;
  68.     IUnknown *      _punkOwner;
  69.     // Cached pointers to interfaces supported by CFSFolder
  70.     IShellIcon *    _psi;
  71.     IPersist *      _pp;
  72.     IPersistFolder * _ppf;
  73.     IShellFolder *  _psfRealCFSFolder;
  74. };
  75. // 
  76. //  Base file-system proxy class
  77. //
  78. class CFSProxyISF : public CHostProxyISF
  79. {
  80.     
  81. public:
  82.     // *** CHostProxyISF methods ***
  83.     virtual STDMETHODIMP CloneProxyPSF(REFIID riid, LPVOID * ppvObj);
  84.     virtual STDMETHODIMP GetUIObjectOfPSF(HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl,
  85.                                       REFIID riid, UINT * prgfInOut, LPVOID * ppvOut);
  86.     virtual STDMETHODIMP CreateViewObjectPSF(HWND hwndOwner, REFIID riid, LPVOID * ppvOut);
  87.     virtual STDMETHODIMP SetOwnerPSF(IUnknown * punkOwner);
  88.     CFSProxyISF();
  89.     
  90. protected:
  91.     virtual ~CFSProxyISF();
  92.     virtual IShellService * v_NewProxy(void) PURE;
  93.     
  94. };
  95. #endif  // _PROXYISF_H__