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

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef _BSMENU_H
  2. #define _BSMENU_H
  3. #include "comcatex.h" 
  4. typedef struct {
  5.     CLSID  clsid;
  6.     CATID  catid;
  7.     UINT   idCmd;
  8.     LPTSTR pszName;
  9.     LPTSTR pszIcon;
  10.     LPTSTR pszMenu;
  11.     LPTSTR pszHelp;
  12.     LPTSTR pszMenuPUI;
  13.     LPTSTR pszHelpPUI;
  14. } BANDCLASSINFO;
  15. class CBandSiteMenu : 
  16.         public IContextMenu,
  17.         public IShellService
  18. {
  19. public:
  20.     
  21.     virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
  22.     virtual STDMETHODIMP_(ULONG) AddRef(void) ;
  23.     virtual STDMETHODIMP_(ULONG) Release(void);
  24.     
  25.     
  26.     // *** IContextMenu methods ***
  27.     STDMETHOD(QueryContextMenu)(HMENU hmenu,
  28.                                 UINT indexMenu,
  29.                                 UINT idCmdFirst,
  30.                                 UINT idCmdLast,
  31.                                 UINT uFlags);
  32.     STDMETHOD(InvokeCommand)(LPCMINVOKECOMMANDINFO lpici);
  33.     STDMETHOD(GetCommandString)(UINT_PTR    idCmd,
  34.                                 UINT        uType,
  35.                                 UINT      * pwReserved,
  36.                                 LPSTR       pszName,
  37.                                 UINT        cchMax) { return E_NOTIMPL; };
  38.     STDMETHOD(SetOwner)(IUnknown* punk);
  39.     BOOL GetMergeMenu() { return (_hdpaBandClasses ? TRUE:FALSE) ; }
  40.     int  LoadFromComCat(const CATID *pcatid);
  41.     int  GetBandClassCount(const  CATID* pcatid, BOOL bMergedOnly );
  42.     BANDCLASSINFO * GetBandClassDataStruct(UINT uBand);
  43.     BOOL DeleteBandClass( REFCLSID rclsid );
  44.     int CreateMergeMenu(HMENU hmenu, UINT cMax, UINT iPosition, UINT idCmdFirst, UINT iStart, BOOL fMungeAllowed = TRUE);
  45. protected:
  46.     CBandSiteMenu();
  47.     ~CBandSiteMenu();
  48.     
  49.     HDPA _hdpaBandClasses; // what bands are insertable here?
  50.     int _idCmdEnumFirst;
  51.     UINT _cRef;
  52.     IBandSite* _pbs;
  53.     
  54.     static int _DPA_FreeBandClassInfo(LPVOID p, LPVOID d);
  55.     
  56.     BOOL _CheckUnique(IDeskBand* pdb, HMENU hmenu) ;
  57.     HRESULT _GetBandIdentifiers(IUnknown *punk, CLSID* pcslid, DWORD* pdwPrivID);
  58.     void _AddNewFSBand(LPCITEMIDLIST pidl, BOOL fNoTitle, DWORD dwPrivID);
  59.     void _ToggleSpecialFolderBand(int i, LPTSTR pszSubPath, BOOL fNoTitle);
  60.     void _BrowseForNewFolderBand();
  61.     void _ToggleComcatBand(UINT idCmd);
  62.     void _AddEnumMenu(HMENU hmenu, int iInsert);
  63.     void _EnumBandClass(const CATID* pcatid, IEnumGUID* peclsid);
  64.     HRESULT _FindBand(const CLSID* pclsid, DWORD dwPrivID, DWORD* pdwBandID);
  65.     friend HRESULT CBandSiteMenu_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi);
  66. };
  67. #endif  // _BSMENU_H