#ifndef _BSMENU_H #define _BSMENU_H #include "comcatex.h" typedef struct { CLSID clsid; CATID catid; UINT idCmd; LPTSTR pszName; LPTSTR pszIcon; LPTSTR pszMenu; LPTSTR pszHelp; LPTSTR pszMenuPUI; LPTSTR pszHelpPUI; } BANDCLASSINFO; class CBandSiteMenu : public IContextMenu3, public IShellService { public: CBandSiteMenu(); STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); STDMETHODIMP_(ULONG) AddRef(void) ; STDMETHODIMP_(ULONG) Release(void); // *** IContextMenu3 methods *** STDMETHOD(QueryContextMenu)(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags); STDMETHOD(InvokeCommand)(LPCMINVOKECOMMANDINFO lpici); STDMETHOD(GetCommandString)(UINT_PTR idCmd, UINT uType, UINT * pwReserved, LPSTR pszName, UINT cchMax) { return E_NOTIMPL; }; STDMETHOD(SetOwner)(IUnknown* punk); STDMETHOD(HandleMenuMsg)(UINT uMsg, WPARAM wParam, LPARAM lParam); STDMETHOD(HandleMenuMsg2)(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plres); BOOL GetMergeMenu() { return (_hdpaBandClasses ? TRUE:FALSE) ; } int LoadFromComCat(const CATID *pcatid); int GetBandClassCount(const CATID* pcatid, BOOL bMergedOnly ); BANDCLASSINFO * GetBandClassDataStruct(UINT uBand); BOOL DeleteBandClass( REFCLSID rclsid ); int CreateMergeMenu(HMENU hmenu, UINT cMax, UINT iPosition, UINT idCmdFirst, UINT iStart, BOOL fMungeAllowed = TRUE); protected: ~CBandSiteMenu(); HDPA _hdpaBandClasses; // what bands are insertable here? int _idCmdEnumFirst; // this is in EXTERNAL units UINT _idCmdFirst; UINT _cRef; IBandSite* _pbs; static int _DPA_FreeBandClassInfo(LPVOID p, LPVOID d); BOOL _CheckUnique(IDeskBand* pdb, HMENU hmenu) ; HRESULT _GetBandIdentifiers(IUnknown *punk, CLSID* pcslid, DWORD* pdwPrivID); void _AddNewFSBand(LPCITEMIDLIST pidl, BOOL fNoTitle, DWORD dwPrivID); void _ToggleSpecialFolderBand(int i, LPTSTR pszSubPath, BOOL fNoTitle); void _BrowseForNewFolderBand(); void _ToggleComcatBand(UINT idCmd); void _AddEnumMenu(HMENU hmenu, int iInsert); static HRESULT _BandClassEnum(REFCATID rcatid, REFCLSID rclsid, LPARAM lParam); HRESULT _FindBand(const CLSID* pclsid, DWORD dwPrivID, DWORD* pdwBandID); UINT _IDToInternal(UINT uID); UINT _IDToExternal(UINT uID); LRESULT _OnInitMenuPopup(HMENU hmenu, UINT uPos); void _PopulateSubmenu(HMENU hmenuSub); }; #endif // _BSMENU_H