windows-nt/Source/XPSP1/NT/shell/shdocvw/nscband.h
2020-09-26 16:20:57 +08:00

154 lines
6 KiB
C++

/**************************************************************\
FILE: NSCBand.h
DESCRIPTION: the class CNscBand exists to support name
space control bands. A name space control uses IShellFolder
rooted in various namespaces including Favorites, history,
Shell Name Space, etc. to depict a hierarchical UI
representation of the given name space.
AUTHOR: chrisny
\**************************************************************/
#include "bands.h"
#include "nsc.h"
#include "uemapp.h"
#ifndef _NSCBAND_H
#define _NSCBAND_H
// for degug trace messages.
#define DM_PERSIST 0 // trace IPS::Load, ::Save, etc.
#define DM_MENU 0 // menu code
#define DM_FOCUS 0 // focus
#define DM_FOCUS2 0 // like DM_FOCUS, but verbose
const short CSIDL_NIL = -32767;
////////////////
/// NSC band
class CNSCBand : public CToolBand
, public IContextMenu
, public IBandNavigate
, public IWinEventHandler
, public INamespaceProxy
{
public:
// *** IUnknown ***
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
STDMETHODIMP_(ULONG) AddRef(void) { return CToolBand::AddRef(); };
STDMETHODIMP_(ULONG) Release(void) { return CToolBand::Release(); };
// *** IOleWindow methods ***
virtual STDMETHODIMP GetWindow(HWND * lphwnd);
// *** IDockingWindow methods ***
virtual STDMETHODIMP ShowDW(BOOL fShow);
virtual STDMETHODIMP CloseDW(DWORD dw);
// *** IDeskBand methods ***
virtual STDMETHODIMP GetBandInfo(DWORD dwBandID, DWORD fViewMode,
DESKBANDINFO* pdbi);
// *** IPersistStream methods ***
// (others use base class implementation)
virtual STDMETHODIMP GetClassID(CLSID *pClassID);
virtual STDMETHODIMP Load(IStream *pStm);
virtual STDMETHODIMP Save(IStream *pStm, BOOL fClearDirty);
// *** IWinEventHandler methods ***
virtual STDMETHODIMP OnWinEvent(HWND hwnd, UINT dwMsg
, WPARAM wParam, LPARAM lParam
, LRESULT *plres);
virtual STDMETHODIMP IsWindowOwner(HWND hwnd);
// *** IContextMenu 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; };
// *** IOleCommandTarget methods ***
virtual STDMETHODIMP Exec(const GUID *pguidCmdGroup,
DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut);
virtual STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD rgCmds[], OLECMDTEXT *pcmdtext);
// *** IBandNavigate methods ***
virtual STDMETHODIMP Select(LPCITEMIDLIST pidl);
// *** IInputObject methods ***
virtual STDMETHODIMP TranslateAcceleratorIO(LPMSG lpMsg);
// *** INamespaceProxy ***
virtual STDMETHODIMP GetNavigateTarget(LPCITEMIDLIST pidl, LPITEMIDLIST *ppidlTarget, ULONG *pulAttrib);
virtual STDMETHODIMP Invoke(LPCITEMIDLIST pidl);
virtual STDMETHODIMP OnSelectionChanged(LPCITEMIDLIST pidl);
virtual STDMETHODIMP RefreshFlags(DWORD *pdwStyle, DWORD *pdwExStyle, DWORD *pdwEnum)
{*pdwStyle = _GetTVStyle(); *pdwExStyle = _GetTVExStyle(); *pdwEnum = _GetEnumFlags(); return S_OK; };
virtual STDMETHODIMP CacheItem(LPCITEMIDLIST pidl) { return S_OK; };
protected:
void _SetNscMode(UINT nMode) { _pns->SetNscMode(nMode); };
virtual DWORD _GetTVStyle();
virtual DWORD _GetTVExStyle() { return 0; };
virtual DWORD _GetEnumFlags() { return SHCONTF_FOLDERS | SHCONTF_NONFOLDERS; };
HRESULT _Init(LPCITEMIDLIST pidl);
virtual HRESULT _InitializeNsc();
virtual ~CNSCBand();
virtual HRESULT _OnRegisterBand(IOleCommandTarget *poctProxy) { return S_OK; } // meant to be overridden
void _UnregisterBand();
void _EnsureImageListsLoaded();
virtual HRESULT _TranslatePidl(LPCITEMIDLIST pidl, LPITEMIDLIST *ppidlTarget, ULONG *pulAttrib);
virtual BOOL _ShouldNavigateToPidl(LPCITEMIDLIST pidl, ULONG ulAttrib);
virtual HRESULT _NavigateRightPane(IShellBrowser *psb, LPCITEMIDLIST pidl);
HRESULT _QueryContextMenuSelection(IContextMenu ** ppcm);
HRESULT _InvokeCommandOnItem(LPCTSTR pszVerb);
#ifndef ENABLE_CCHANNELBAND
friend HRESULT CNSCBand_CreateInstanceEx(IUnknown *punkOuter, IUnknown **ppunk
, LPCOBJECTINFO poi, LPCITEMIDLIST pidl);
#endif
friend HRESULT CHistBand_CreateInstance(IUnknown *punkOuter, IUnknown **ppunk
, LPCOBJECTINFO poi);
#ifndef ENABLE_CCHANNELBAND
friend HRESULT CChannelBand_CreateInstance(IUnknown *punkOuter, IUnknown **ppunk
, LPCOBJECTINFO poi);
#endif // ENABLE_CCHANNELBAND
LPITEMIDLIST _pidl;
WCHAR _szTitle[40];
INSCTree2 * _pns; // name space control data.
IWinEventHandler * _pweh; // name space control's OnWinEvent handler
BITBOOL _fInited :1; // true if band has been inited.
BITBOOL _fVisible :1; // true if band is showing
DWORD _dwStyle; // Treeview style
LPCOBJECTINFO _poi; // cached object info.
HACCEL _haccTree;
HIMAGELIST _himlNormal; // shared image list
HIMAGELIST _himlHot;
};
#endif /* _NSCBAND_H */