ReactOS 0.4.16-dev-1140-g53685ad
CMenuBand.h
Go to the documentation of this file.
1/*
2* Shell Menu Band
3*
4* Copyright 2014 David Quintana
5*
6* This library is free software; you can redistribute it and/or
7* modify it under the terms of the GNU Lesser General Public
8* License as published by the Free Software Foundation; either
9* version 2.1 of the License, or (at your option) any later version.
10*
11* This library is distributed in the hope that it will be useful,
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14* Lesser General Public License for more details.
15*
16* You should have received a copy of the GNU Lesser General Public
17* License along with this library; if not, write to the Free Software
18* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19*/
20#pragma once
21
24class CMenuSFToolbar;
26
27class CMenuBand :
28 public CComCoClass<CMenuBand, &CLSID_MenuBand>,
29 public CComObjectRootEx<CComMultiThreadModelNoCS>,
30 public IDeskBand,
31 public IObjectWithSite,
32 public IInputObject,
33 public IPersistStream,
34 public IOleCommandTarget,
35 public IServiceProvider,
36 public IMenuPopup,
37 public IMenuBand,
38 public IShellMenu2,
39 public IWinEventHandler,
40 public IShellMenuAcc
41{
42private:
46
47 CComPtr<IOleWindow> m_site;
48 CComPtr<IShellMenuCallback> m_psmc;
49 CComPtr<IMenuPopup> m_subMenuChild;
50 CComPtr<IMenuPopup> m_subMenuParent;
51 CComPtr<CMenuBand> m_childBand;
52 CComPtr<CMenuBand> m_parentBand;
53
60
63
68
71
74
75public:
76 CMenuBand();
77 virtual ~CMenuBand();
78
82
85 COM_INTERFACE_ENTRY_IID(IID_IShellMenu, IShellMenu)
86 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
88 COM_INTERFACE_ENTRY_IID(IID_IDockingWindow, IDockingWindow)
91 COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
94 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
95 COM_INTERFACE_ENTRY_IID(IID_IMenuPopup, IMenuPopup)
97 COM_INTERFACE_ENTRY_IID(IID_IShellMenu2, IShellMenu2)
98 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler)
99 COM_INTERFACE_ENTRY_IID(IID_IShellMenuAcc, IShellMenuAcc)
101
102 // *** IDeskBand methods ***
103 STDMETHOD(GetBandInfo)(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi) override;
104
105 // *** IDockingWindow methods ***
108 STDMETHOD(ResizeBorderDW)(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved) override;
109
110 // *** IOleWindow methods ***
113
114 // *** IObjectWithSite methods ***
117
118 // *** IInputObject methods ***
119 STDMETHOD(UIActivateIO)(BOOL fActivate, LPMSG lpMsg) override;
122
123 // *** IPersistStream methods ***
126 STDMETHOD(Save)(IStream *pStm, BOOL fClearDirty) override;
128
129 // *** IPersist methods ***
131
132 // *** IOleCommandTarget methods ***
133 STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText) override;
134 STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override;
135
136 // *** IServiceProvider methods ***
138
139 // *** IMenuPopup methods ***
141 STDMETHOD(OnSelect)(DWORD dwSelectType) override;
143
144 // *** IDeskBar methods ***
145 STDMETHOD(SetClient)(IUnknown *punkClient) override;
146 STDMETHOD(GetClient)(IUnknown **ppunkClient) override;
148
149 // *** IMenuBand methods ***
152
153 // *** IShellMenu methods ***
155 STDMETHOD(GetMenuInfo)(IShellMenuCallback **ppsmc, UINT *puId, UINT *puIdAncestor, DWORD *pdwFlags) override;
157 STDMETHOD(GetShellFolder)(DWORD *pdwFlags, LPITEMIDLIST *ppidl, REFIID riid, void **ppv) override;
159 STDMETHOD(GetMenu)(HMENU *phmenu, HWND *phwnd, DWORD *pdwFlags) override;
163
164 // *** IWinEventHandler methods ***
167
168 // *** IShellMenu2 methods ***
174
175 // *** IShellMenuAcc methods ***
183
186 HRESULT _TrackSubMenu(HMENU popup, INT x, INT y, RECT& rcExclude);
191 HRESULT _MenuItemSelect(DWORD changeType);
193 HRESULT _OnPopupSubMenu(IShellMenu * childShellMenu, POINTL * pAt, RECTL * pExclude, BOOL mouseInitiated);
204
205 HRESULT AdjustForTheme(BOOL bFlatStyle);
206
208 {
209 return m_useBigIcons;
210 }
211
212private:
215};
DWORD Id
HWND hWnd
Definition: settings.c:17
#define THIS
Definition: basetyps.h:66
#define STDMETHOD(m)
Definition: basetyps.h:62
HRESULT _CallCBWithItemPidl(LPITEMIDLIST pidl, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CMenuBand.cpp:775
STDMETHOD() InvalidateItem(LPSMDATA psmd, DWORD dwFlags) override
Definition: CMenuBand.cpp:1172
STDMETHOD() SetMinWidth(THIS) override
Definition: CMenuBand.cpp:1214
HRESULT _IsPopup()
Definition: CMenuBand.cpp:622
STDMETHOD() UIActivateIO(BOOL fActivate, LPMSG lpMsg) override
Definition: CMenuBand.cpp:476
STDMETHOD() OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) override
Definition: CMenuBand.cpp:726
STDMETHOD() IsWindowOwner(HWND hWnd) override
Definition: CMenuBand.cpp:759
STDMETHOD() OnSelect(DWORD dwSelectType) override
Definition: CMenuBand.cpp:558
HRESULT _OnPopupSubMenu(IShellMenu *childShellMenu, POINTL *pAt, RECTL *pExclude, BOOL mouseInitiated)
Definition: CMenuBand.cpp:1066
HWND m_trackedHwnd
Definition: CMenuBand.h:73
HRESULT _GetTopLevelWindow(HWND *topLevel)
Definition: CMenuBand.cpp:885
STDMETHOD() DoDefaultAction(THIS) override
Definition: CMenuBand.cpp:1262
STDMETHOD() GetSubMenu(THIS) override
Definition: CMenuBand.cpp:1202
STDMETHOD() HasFocusIO() override
Definition: CMenuBand.cpp:1274
STDMETHOD() SetClient(IUnknown *punkClient) override
Definition: CMenuBand.cpp:632
STDMETHOD() GetSizeMax(ULARGE_INTEGER *pcbSize) override
Definition: CMenuBand.cpp:1305
CMenuSFToolbar * m_SFToolbar
Definition: CMenuBand.h:45
CMenuFocusManager * m_focusManager
Definition: CMenuBand.h:43
HRESULT _TrackContextMenu(IContextMenu *popup, INT x, INT y)
Definition: CMenuBand.cpp:823
HRESULT _TrackSubMenu(HMENU popup, INT x, INT y, RECT &rcExclude)
Definition: CMenuBand.cpp:802
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
Definition: CMenuBand.cpp:1317
STDMETHOD() TranslateMenuMessage(MSG *pmsg, LRESULT *plRet) override
Definition: CMenuBand.cpp:672
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
Definition: CMenuBand.cpp:542
PVOID m_UserData
Definition: CMenuBand.h:57
UINT m_uIdAncestor
Definition: CMenuBand.h:55
BOOL UseBigIcons()
Definition: CMenuBand.h:207
CMenuToolbarBase * m_popupBar
Definition: CMenuBand.h:66
STDMETHOD() GetSite(REFIID riid, PVOID *ppvSite) override
Definition: CMenuBand.cpp:251
STDMETHOD() ShowDW(BOOL fShow) override
Definition: CMenuBand.cpp:391
STDMETHOD() TranslateAcceleratorIO(LPMSG lpMsg) override
Definition: CMenuBand.cpp:1281
HRESULT _DisableMouseTrack(BOOL bDisable)
Definition: CMenuBand.cpp:1121
CComPtr< IMenuPopup > m_subMenuChild
Definition: CMenuBand.h:49
HRESULT _KillPopupTimers()
Definition: CMenuBand.cpp:1130
STDMETHOD() GetTop(THIS) override
Definition: CMenuBand.cpp:1232
HRESULT _MenuItemSelect(DWORD changeType)
Definition: CMenuBand.cpp:965
HWND m_menuOwner
Definition: CMenuBand.h:59
HRESULT _MenuBarMouseUp(HWND hwnd, INT item, BOOL isLButton)
Definition: CMenuBand.cpp:1153
STDMETHOD() GetParentSite(THIS) override
Definition: CMenuBand.cpp:1250
CComPtr< IOleWindow > m_site
Definition: CMenuBand.h:47
BOOL m_Show
Definition: CMenuBand.h:69
HRESULT _SetParentBand(CMenuBand *parent)
Definition: CMenuBand.cpp:616
UINT m_uId
Definition: CMenuBand.h:54
STDMETHOD() SetToolbar(THIS) override
Definition: CMenuBand.cpp:1208
STDMETHOD() SetTheme(THIS) override
Definition: CMenuBand.cpp:1226
DWORD m_dwFlags
Definition: CMenuBand.h:56
STDMETHOD() ResizeBorderDW(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved) override
Definition: CMenuBand.cpp:1190
CComPtr< CMenuBand > m_childBand
Definition: CMenuBand.h:51
STDMETHOD() GetClassID(CLSID *pClassID) override
Definition: CMenuBand.cpp:1311
CComPtr< CMenuBand > m_parentBand
Definition: CMenuBand.h:52
HRESULT _CancelCurrentPopup()
Definition: CMenuBand.cpp:1049
STDMETHOD() SetSite(IUnknown *pUnkSite) override
Definition: CMenuBand.cpp:187
HMENU m_trackedPopup
Definition: CMenuBand.h:72
HRESULT _CallCBWithItemId(UINT Id, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: CMenuBand.cpp:770
STDMETHOD() SetNoBorder(THIS) override
Definition: CMenuBand.cpp:1220
STDMETHOD() OnPosRectChangeDB(RECT *prc) override
Definition: CMenuBand.cpp:272
STDMETHOD() CloseDW(DWORD dwReserved) override
Definition: CMenuBand.cpp:443
CComPtr< IShellMenuCallback > m_psmc
Definition: CMenuBand.h:48
STDMETHOD() GetMenu(HMENU *phmenu, HWND *phwnd, DWORD *pdwFlags) override
Definition: CMenuBand.cpp:176
HMENU m_hmenu
Definition: CMenuBand.h:58
HRESULT _KeyboardItemChange(DWORD change)
Definition: CMenuBand.cpp:922
INT m_hotItem
Definition: CMenuBand.h:65
STDMETHOD() GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi) override
Definition: CMenuBand.cpp:342
HRESULT _ChangeHotItem(CMenuToolbarBase *tb, INT id, DWORD dwFlags)
Definition: CMenuBand.cpp:891
HWND m_topLevelWindow
Definition: CMenuBand.h:62
HRESULT _CallCB(UINT uMsg, WPARAM wParam, LPARAM lParam, UINT id=0, LPITEMIDLIST pidl=NULL)
Definition: CMenuBand.cpp:780
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
Definition: CMenuBand.cpp:1196
STDMETHOD() SetShellFolder(IShellFolder *psf, LPCITEMIDLIST pidlFolder, HKEY hKey, DWORD dwFlags) override
Definition: CMenuBand.cpp:685
STDMETHOD() SetSubMenu(IMenuPopup *pmp, BOOL fSet) override
Definition: CMenuBand.cpp:598
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
Definition: CMenuBand.cpp:506
HRESULT _SetChildBand(CMenuBand *child)
Definition: CMenuBand.cpp:605
STDMETHOD() SetMenu(HMENU hmenu, HWND hwnd, DWORD dwFlags) override
Definition: CMenuBand.cpp:118
HRESULT AdjustForTheme(BOOL bFlatStyle)
Definition: CMenuBand.cpp:1167
HRESULT _IsTracking()
Definition: CMenuBand.cpp:627
CComPtr< IMenuPopup > m_subMenuParent
Definition: CMenuBand.h:50
STDMETHOD() GetShellFolder(DWORD *pdwFlags, LPITEMIDLIST *ppidl, REFIID riid, void **ppv) override
Definition: CMenuBand.cpp:719
STDMETHOD() GetBottom(THIS) override
Definition: CMenuBand.cpp:1238
HRESULT _MenuBarMouseDown(HWND hwnd, INT item, BOOL isLButton)
Definition: CMenuBand.cpp:1144
STDMETHOD() GetTracked(THIS) override
Definition: CMenuBand.cpp:1244
HRESULT _HasSubMenu()
Definition: CMenuBand.cpp:1162
STDMETHOD() Save(IStream *pStm, BOOL fClearDirty) override
Definition: CMenuBand.cpp:1299
STDMETHOD() GetClient(IUnknown **ppunkClient) override
Definition: CMenuBand.cpp:652
INT m_popupItem
Definition: CMenuBand.h:67
CMenuToolbarBase * m_hotBar
Definition: CMenuBand.h:64
CMenuStaticToolbar * m_staticToolbar
Definition: CMenuBand.h:44
BOOL m_shellBottom
Definition: CMenuBand.h:70
STDMETHOD() GetWindow(HWND *phwnd) override
Definition: CMenuBand.cpp:259
BOOL m_useBigIcons
Definition: CMenuBand.h:61
STDMETHOD() IsMenuMessage(MSG *pmsg) override
Definition: CMenuBand.cpp:667
HRESULT _ChangePopupItem(CMenuToolbarBase *tb, INT id)
Definition: CMenuBand.cpp:910
STDMETHOD() Load(IStream *pStm) override
Definition: CMenuBand.cpp:1293
STDMETHOD() GetMenuInfo(IShellMenuCallback **ppsmc, UINT *puId, UINT *puIdAncestor, DWORD *pdwFlags) override
Definition: CMenuBand.cpp:91
virtual ~CMenuBand()
Definition: CMenuBand.cpp:60
STDMETHOD() SetMenuToolbar(IUnknown *punk, DWORD dwFlags) override
Definition: CMenuBand.cpp:1184
STDMETHOD() IsDirty() override
Definition: CMenuBand.cpp:1287
HRESULT _BeforeCancelPopup()
Definition: CMenuBand.cpp:1112
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
@ Popup
Definition: console.h:35
@ IsEmpty
Definition: atl_ax.c:995
r parent
Definition: btrfs.c:3010
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
return pTarget GetState()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
int MP_POPUPFLAGS
Definition: shobjidl.idl:2611
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
Definition: atlcom.h:679
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:651
#define DECLARE_REGISTRY_RESOURCEID(x)
Definition: atlcom.h:645
#define END_COM_MAP()
Definition: atlcom.h:592
const IID IID_IObjectWithSite
static const WCHAR tb[]
Definition: suminfo.c:285
static HKEY override
Definition: compobj.c:81
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static HWND child
Definition: cursoricon.c:298
static ATOM item
Definition: dde.c:856
static HMENU hmenu
Definition: win.c:66
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
_Out_ LPRECT prc
Definition: ntgdi.h:1658
const GUID IID_IOleWindow
const GUID IID_IPersist
Definition: proxy.cpp:14
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define REFIID
Definition: guiddef.h:118
#define IDR_MENUBAND
Definition: shresdef.h:930
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
Definition: scsiwmi.h:51
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
static void Initialize()
Definition: xlate.c:212
#define const
Definition: zconf.h:233