4 * Copyright 2014 David Quintana
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.
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.
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
22 class CMenuToolbarBase
;
23 class CMenuStaticToolbar
;
25 class CMenuFocusManager
;
28 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
30 public IObjectWithSite
,
32 public IPersistStream
,
33 public IOleCommandTarget
,
34 public IServiceProvider
,
38 public IWinEventHandler
,
42 CMenuFocusManager
* m_focusManager
;
43 CMenuStaticToolbar
* m_staticToolbar
;
44 CMenuSFToolbar
* m_SFToolbar
;
46 CComPtr
<IOleWindow
> m_site
;
47 CComPtr
<IShellMenuCallback
> m_psmc
;
48 CComPtr
<IMenuPopup
> m_subMenuChild
;
49 CComPtr
<IMenuPopup
> m_subMenuParent
;
50 CComPtr
<CMenuBand
> m_childBand
;
51 CComPtr
<CMenuBand
> m_parentBand
;
61 HWND m_topLevelWindow
;
63 CMenuToolbarBase
* m_hotBar
;
65 CMenuToolbarBase
* m_popupBar
;
78 DECLARE_NOT_AGGREGATABLE(CMenuBand
)
79 DECLARE_PROTECT_FINAL_CONSTRUCT()
81 BEGIN_COM_MAP(CMenuBand
)
82 COM_INTERFACE_ENTRY_IID(IID_IDeskBar
, IMenuPopup
)
83 COM_INTERFACE_ENTRY_IID(IID_IShellMenu
, IShellMenu
)
84 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget
, IOleCommandTarget
)
85 COM_INTERFACE_ENTRY_IID(IID_IOleWindow
, IDeskBand
)
86 COM_INTERFACE_ENTRY_IID(IID_IDockingWindow
, IDockingWindow
)
87 COM_INTERFACE_ENTRY_IID(IID_IDeskBand
, IDeskBand
)
88 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite
, IObjectWithSite
)
89 COM_INTERFACE_ENTRY_IID(IID_IInputObject
, IInputObject
)
90 COM_INTERFACE_ENTRY_IID(IID_IPersistStream
, IPersistStream
)
91 COM_INTERFACE_ENTRY_IID(IID_IPersist
, IPersistStream
)
92 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider
, IServiceProvider
)
93 COM_INTERFACE_ENTRY_IID(IID_IMenuPopup
, IMenuPopup
)
94 COM_INTERFACE_ENTRY_IID(IID_IMenuBand
, IMenuBand
)
95 COM_INTERFACE_ENTRY_IID(IID_IShellMenu2
, IShellMenu2
)
96 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler
, IWinEventHandler
)
97 COM_INTERFACE_ENTRY_IID(IID_IShellMenuAcc
, IShellMenuAcc
)
100 // *** IDeskBand methods ***
101 virtual HRESULT STDMETHODCALLTYPE
GetBandInfo(DWORD dwBandID
, DWORD dwViewMode
, DESKBANDINFO
*pdbi
);
103 // *** IDockingWindow methods ***
104 virtual HRESULT STDMETHODCALLTYPE
ShowDW(BOOL fShow
);
105 virtual HRESULT STDMETHODCALLTYPE
CloseDW(DWORD dwReserved
);
106 virtual HRESULT STDMETHODCALLTYPE
ResizeBorderDW(LPCRECT prcBorder
, IUnknown
*punkToolbarSite
, BOOL fReserved
);
108 // *** IOleWindow methods ***
109 virtual HRESULT STDMETHODCALLTYPE
GetWindow(HWND
*phwnd
);
110 virtual HRESULT STDMETHODCALLTYPE
ContextSensitiveHelp(BOOL fEnterMode
);
112 // *** IObjectWithSite methods ***
113 virtual HRESULT STDMETHODCALLTYPE
SetSite(IUnknown
*pUnkSite
);
114 virtual HRESULT STDMETHODCALLTYPE
GetSite(REFIID riid
, PVOID
*ppvSite
);
116 // *** IInputObject methods ***
117 virtual HRESULT STDMETHODCALLTYPE
UIActivateIO(BOOL fActivate
, LPMSG lpMsg
);
118 virtual HRESULT STDMETHODCALLTYPE
HasFocusIO();
119 virtual HRESULT STDMETHODCALLTYPE
TranslateAcceleratorIO(LPMSG lpMsg
);
121 // *** IPersistStream methods ***
122 virtual HRESULT STDMETHODCALLTYPE
IsDirty();
123 virtual HRESULT STDMETHODCALLTYPE
Load(IStream
*pStm
);
124 virtual HRESULT STDMETHODCALLTYPE
Save(IStream
*pStm
, BOOL fClearDirty
);
125 virtual HRESULT STDMETHODCALLTYPE
GetSizeMax(ULARGE_INTEGER
*pcbSize
);
127 // *** IPersist methods ***
128 virtual HRESULT STDMETHODCALLTYPE
GetClassID(CLSID
*pClassID
);
130 // *** IOleCommandTarget methods ***
131 virtual HRESULT STDMETHODCALLTYPE
QueryStatus(const GUID
*pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
);
132 virtual HRESULT STDMETHODCALLTYPE
Exec(const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
);
134 // *** IServiceProvider methods ***
135 virtual HRESULT STDMETHODCALLTYPE
QueryService(REFGUID guidService
, REFIID riid
, void **ppvObject
);
137 // *** IMenuPopup methods ***
138 virtual HRESULT STDMETHODCALLTYPE
Popup(POINTL
*ppt
, RECTL
*prcExclude
, MP_POPUPFLAGS dwFlags
);
139 virtual HRESULT STDMETHODCALLTYPE
OnSelect(DWORD dwSelectType
);
140 virtual HRESULT STDMETHODCALLTYPE
SetSubMenu(IMenuPopup
*pmp
, BOOL fSet
);
142 // *** IDeskBar methods ***
143 virtual HRESULT STDMETHODCALLTYPE
SetClient(IUnknown
*punkClient
);
144 virtual HRESULT STDMETHODCALLTYPE
GetClient(IUnknown
**ppunkClient
);
145 virtual HRESULT STDMETHODCALLTYPE
OnPosRectChangeDB(RECT
*prc
);
147 // *** IMenuBand methods ***
148 virtual HRESULT STDMETHODCALLTYPE
IsMenuMessage(MSG
*pmsg
);
149 virtual HRESULT STDMETHODCALLTYPE
TranslateMenuMessage(MSG
*pmsg
, LRESULT
*plRet
);
151 // *** IShellMenu methods ***
152 virtual HRESULT STDMETHODCALLTYPE
Initialize(IShellMenuCallback
*psmc
, UINT uId
, UINT uIdAncestor
, DWORD dwFlags
);
153 virtual HRESULT STDMETHODCALLTYPE
GetMenuInfo(IShellMenuCallback
**ppsmc
, UINT
*puId
, UINT
*puIdAncestor
, DWORD
*pdwFlags
);
154 virtual HRESULT STDMETHODCALLTYPE
SetShellFolder(IShellFolder
*psf
, LPCITEMIDLIST pidlFolder
, HKEY hKey
, DWORD dwFlags
);
155 virtual HRESULT STDMETHODCALLTYPE
GetShellFolder(DWORD
*pdwFlags
, LPITEMIDLIST
*ppidl
, REFIID riid
, void **ppv
);
156 virtual HRESULT STDMETHODCALLTYPE
SetMenu(HMENU hmenu
, HWND hwnd
, DWORD dwFlags
);
157 virtual HRESULT STDMETHODCALLTYPE
GetMenu(HMENU
*phmenu
, HWND
*phwnd
, DWORD
*pdwFlags
);
158 virtual HRESULT STDMETHODCALLTYPE
InvalidateItem(LPSMDATA psmd
, DWORD dwFlags
);
159 virtual HRESULT STDMETHODCALLTYPE
GetState(LPSMDATA psmd
);
160 virtual HRESULT STDMETHODCALLTYPE
SetMenuToolbar(IUnknown
*punk
, DWORD dwFlags
);
162 // *** IWinEventHandler methods ***
163 virtual HRESULT STDMETHODCALLTYPE
OnWinEvent(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*theResult
);
164 virtual HRESULT STDMETHODCALLTYPE
IsWindowOwner(HWND hWnd
);
166 // *** IShellMenu2 methods ***
167 virtual HRESULT STDMETHODCALLTYPE
GetSubMenu(THIS
);
168 virtual HRESULT STDMETHODCALLTYPE
SetToolbar(THIS
);
169 virtual HRESULT STDMETHODCALLTYPE
SetMinWidth(THIS
);
170 virtual HRESULT STDMETHODCALLTYPE
SetNoBorder(THIS
);
171 virtual HRESULT STDMETHODCALLTYPE
SetTheme(THIS
);
173 // *** IShellMenuAcc methods ***
174 virtual HRESULT STDMETHODCALLTYPE
GetTop(THIS
);
175 virtual HRESULT STDMETHODCALLTYPE
GetBottom(THIS
);
176 virtual HRESULT STDMETHODCALLTYPE
GetTracked(THIS
);
177 virtual HRESULT STDMETHODCALLTYPE
GetParentSite(THIS
);
178 virtual HRESULT STDMETHODCALLTYPE
GetState(THIS
);
179 virtual HRESULT STDMETHODCALLTYPE
DoDefaultAction(THIS
);
180 virtual HRESULT STDMETHODCALLTYPE
IsEmpty(THIS
);
182 HRESULT
_CallCBWithItemId(UINT Id
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
183 HRESULT
_CallCBWithItemPidl(LPITEMIDLIST pidl
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
184 HRESULT
_TrackSubMenu(HMENU popup
, INT x
, INT y
, RECT
& rcExclude
);
185 HRESULT
_TrackContextMenu(IContextMenu
* popup
, INT x
, INT y
);
186 HRESULT
_GetTopLevelWindow(HWND
*topLevel
);
187 HRESULT
_ChangeHotItem(CMenuToolbarBase
* tb
, INT id
, DWORD dwFlags
);
188 HRESULT
_ChangePopupItem(CMenuToolbarBase
* tb
, INT id
);
189 HRESULT
_MenuItemSelect(DWORD changeType
);
190 HRESULT
_CancelCurrentPopup();
191 HRESULT
_OnPopupSubMenu(IShellMenu
* childShellMenu
, POINTL
* pAt
, RECTL
* pExclude
, BOOL mouseInitiated
);
192 HRESULT
_BeforeCancelPopup();
193 HRESULT
_DisableMouseTrack(BOOL bDisable
);
194 HRESULT
_SetChildBand(CMenuBand
* child
);
195 HRESULT
_SetParentBand(CMenuBand
* parent
);
197 HRESULT
_IsTracking();
198 HRESULT
_KillPopupTimers();
199 HRESULT
_MenuBarMouseDown(HWND hwnd
, INT item
, BOOL isLButton
);
200 HRESULT
_MenuBarMouseUp(HWND hwnd
, INT item
);
201 HRESULT
_HasSubMenu();
203 HRESULT
AdjustForTheme(BOOL bFlatStyle
);
207 return m_useBigIcons
;
211 HRESULT
_KeyboardItemChange(DWORD change
);
212 HRESULT
_CallCB(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, UINT id
= 0, LPITEMIDLIST pidl
= NULL
);