|
|
#ifndef _menubar_h
#define _menubar_h
#ifdef __cplusplus
#include "iface.h"
#include "basebar.h"
IMenuPopup* CreateMenuPopup(IMenuPopup *pmpParent, IShellFolder* psf, LPCITEMIDLIST pidl, BANDINFOSFB * pbi, BOOL bMenuBand); IMenuPopup* CreateMenuPopup2(IMenuPopup *pmpParent, IMenuBand* pmb, IShellFolder* psf, LPCITEMIDLIST pidl, BANDINFOSFB * pbi, BOOL bMenuBand); HRESULT FindBandInBandSite(IMenuPopup* pmpParent, IBandSite** ppbs, LPCITEMIDLIST pidl, REFIID riid, void** ppvOut); HRESULT ShowBandInBandSite(IUnknown* punkBS, IUnknown* punkDB);
class CMenuDeskBar : public CBaseBar ,public IMenuPopup ,public IObjectWithSite ,public IBanneredBar ,public IInitializeObject { public: // *** IUnknown ***
virtual STDMETHODIMP_(ULONG) AddRef(void) { return CBaseBar::AddRef(); }; virtual STDMETHODIMP_(ULONG) Release(void){ return CBaseBar::Release(); }; virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
// *** IServiceProvider methods ***
virtual STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, LPVOID* ppvObj); // *** IOleWindow methods ***
virtual STDMETHODIMP GetWindow(HWND * lphwnd) { return CBaseBar::GetWindow(lphwnd); }; virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) { return CBaseBar::ContextSensitiveHelp(fEnterMode); };
// *** IDeskBar methods ***
STDMETHODIMP SetClient(IUnknown* punk) { return CBaseBar::SetClient(punk); }; STDMETHODIMP GetClient(IUnknown** ppunkClient) { return CBaseBar::GetClient(ppunkClient); }; STDMETHODIMP OnPosRectChangeDB (LPRECT prc) { return CBaseBar::OnPosRectChangeDB(prc); };
// *** IInputObjectSite methods (override) ***
virtual STDMETHODIMP OnFocusChangeIS(IUnknown *punk, BOOL fSetFocus);
// *** IMenuPopup methods ***
virtual STDMETHODIMP Popup(POINTL *ppt, RECTL *prcExclude, DWORD dwFlags); virtual STDMETHODIMP OnSelect(DWORD dwSelectType); virtual STDMETHODIMP SetSubMenu(IMenuPopup* pmp, BOOL fSet);
// *** IObjectWithSite methods ***
STDMETHODIMP SetSite(IUnknown * pUnkSite); STDMETHODIMP GetSite(REFIID riid, void ** ppvSite);
// *** IOleCommandTarget methods ***
virtual STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut); // *** IBanneredBar methods ***
virtual STDMETHODIMP SetIconSize(DWORD iIcon); virtual STDMETHODIMP GetIconSize(DWORD* piIcon) { ASSERT(piIcon); *piIcon = _iIconSize; return NOERROR;}; virtual STDMETHODIMP SetBitmap(HBITMAP hBitmap); virtual STDMETHODIMP GetBitmap(HBITMAP* phBitmap) { ASSERT(phBitmap); *phBitmap = _hbmp; return NOERROR;};
// *** IInitializeObject methods ***
// This is for Backwards compatility with Start Menu.
STDMETHODIMP Initialize() { return NOERROR; }
CMenuDeskBar();
protected: virtual LRESULT v_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); virtual void _OnCreate(); virtual void _OnSize(); virtual DWORD _GetExStyle(); virtual DWORD _GetClassStyle(); void _AllowMessageThrough(UINT uMsg, WPARAM wParam, LPARAM lParam); virtual void _GetPopupWindowPosition(RECT* rcDesired, RECT* rcExclude, RECT *prcResult, SIZE * psizeEdge, UINT uside); void _PopDown(); BOOL _IsMyParent(HWND hwnd); IMenuPopup* _GetMenuBarParent(IUnknown* punk); UINT _GetSide() { return _uSide;}; HRESULT _PositionWindow(POINTL *ppt, RECTL* prcExclude, DWORD dwFlags); LRESULT _DoPaint(HWND hwnd, HDC hdc, DWORD dwFlags); void _DoNCPaint(HWND hwnd, HDC hdc); void _SelectItem(BOOL bFirst); void AdjustForTheme();
virtual ~CMenuDeskBar(); POINT _pt; IMenuPopup* _pmpParent; IMenuPopup* _pmpChild; IUnknown* _punkSite; UINT _uSide;
HBITMAP _hbmp; DWORD _iIconSize; SIZE _sizeBmp; COLORREF _rgb;
BITBOOL _fActive: 1;
RECT _rcExclude; BITBOOL _fExcludeRect: 1; // TRUE: _rcExclude contains valid
BITBOOL _fExpanded: 1; BITBOOL _fFlatMenuMode: 1; BOOL _fNoBorder;
friend HRESULT CMenuDeskBar_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi); };
HRESULT TrackShellMenu(HWND hwnd, LPRECT prc, IShellMenu* psm, DWORD dwFlags);
#endif // __cplusplus
#endif // _menubar_h
|