0a33ec73e7908bc7591011c09cb5416359a9a17d
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
23 class CMenuFocusManager
;
25 #define WM_USER_ISTRACKEDITEM (WM_USER+41)
26 #define WM_USER_CHANGETRACKEDITEM (WM_USER+42)
29 class CMenuToolbarBase
32 HWND m_hwnd
; // May be the pager
35 WNDPROC m_SubclassOld
;
36 BOOL m_disableMouseTrack
;
39 CMenuBand
* m_menuBand
;
45 CMenuToolbarBase
* m_hotBar
;
47 CMenuToolbarBase
* m_popupBar
;
54 static LRESULT CALLBACK
s_SubclassProc(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
57 CMenuToolbarBase(CMenuBand
*menuBand
, BOOL usePager
);
58 virtual ~CMenuToolbarBase();
60 HRESULT
IsWindowOwner(HWND hwnd
);
61 HRESULT
CreateToolbar(HWND hwndParent
, DWORD dwFlags
);
62 HRESULT
GetWindow(HWND
*phwnd
);
63 HRESULT
ShowWindow(BOOL fShow
);
66 HRESULT
OnWinEvent(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*theResult
);
68 HRESULT
OnHotItemChanged(CMenuToolbarBase
* toolbar
, INT item
);
69 HRESULT
OnPopupItemChanged(CMenuToolbarBase
* toolbar
, INT item
);
71 HRESULT
PopupSubMenu(UINT itemId
, UINT index
, IShellMenu
* childShellMenu
);
72 HRESULT
PopupSubMenu(UINT itemId
, UINT index
, HMENU menu
);
73 HRESULT
DoContextMenu(IContextMenu
* contextMenu
);
75 HRESULT
ChangeHotItem(DWORD changeType
);
76 HRESULT
OnHotItemChange(const NMTBHOTITEM
* hot
, LRESULT
* theResult
);
78 HRESULT
IsTrackedItem(INT index
);
79 HRESULT
ChangeTrackedItem(INT index
);
81 HRESULT
GetIdealSize(SIZE
& size
);
82 HRESULT
SetPosSize(int x
, int y
, int cx
, int cy
);
84 void InvalidateDraw();
86 HRESULT
DisableMouseTrack(BOOL bDisable
);
88 virtual HRESULT
FillToolbar(BOOL clearFirst
=FALSE
) = 0;
89 virtual HRESULT
OnContextMenu(NMMOUSE
* rclick
) = 0;
91 HRESULT
PopupItem(INT uItem
);
92 HRESULT
HasSubMenu(INT uItem
);
93 HRESULT
GetDataFromId(INT uItem
, INT
* pIndex
, DWORD_PTR
* pData
);
96 virtual HRESULT
OnCommand(WPARAM wParam
, LPARAM lParam
, LRESULT
*theResult
);
98 virtual HRESULT
OnDeletingButton(const NMTOOLBAR
* tb
) = 0;
99 virtual HRESULT
InternalPopupItem(INT uItem
, INT index
, DWORD_PTR dwData
) = 0;
100 virtual HRESULT
InternalHasSubMenu(INT uItem
, INT index
, DWORD_PTR dwData
) = 0;
102 LRESULT CALLBACK
SubclassProc(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
104 HRESULT
AddButton(DWORD commandId
, LPCWSTR caption
, BOOL hasSubMenu
, INT iconId
, DWORD_PTR buttonData
, BOOL last
);
105 HRESULT
AddSeparator(BOOL last
);
106 HRESULT
AddPlaceholder();
108 HRESULT
UpdateImageLists();
111 HRESULT
OnCustomDraw(LPNMTBCUSTOMDRAW cdraw
, LRESULT
* theResult
);
114 class CMenuStaticToolbar
:
115 public CMenuToolbarBase
121 CMenuStaticToolbar(CMenuBand
*menuBand
);
122 virtual ~CMenuStaticToolbar() {}
124 HRESULT
SetMenu(HMENU hmenu
, HWND hwnd
, DWORD dwFlags
);
125 HRESULT
GetMenu(HMENU
*phmenu
, HWND
*phwnd
, DWORD
*pdwFlags
);
127 virtual HRESULT
FillToolbar(BOOL clearFirst
=FALSE
);
128 virtual HRESULT
OnCommand(WPARAM wParam
, LPARAM lParam
, LRESULT
*theResult
);
129 virtual HRESULT
OnContextMenu(NMMOUSE
* rclick
);
132 virtual HRESULT
OnDeletingButton(const NMTOOLBAR
* tb
);
134 virtual HRESULT
InternalPopupItem(INT uItem
, INT index
, DWORD_PTR dwData
);
135 virtual HRESULT
InternalHasSubMenu(INT uItem
, INT index
, DWORD_PTR dwData
);
138 class CMenuSFToolbar
:
139 public CMenuToolbarBase
142 CComPtr
<IShellFolder
> m_shellFolder
;
143 LPCITEMIDLIST m_idList
;
147 CMenuSFToolbar(CMenuBand
*menuBand
);
148 virtual ~CMenuSFToolbar();
150 HRESULT
SetShellFolder(IShellFolder
*psf
, LPCITEMIDLIST pidlFolder
, HKEY hKey
, DWORD dwFlags
);
151 HRESULT
GetShellFolder(DWORD
*pdwFlags
, LPITEMIDLIST
*ppidl
, REFIID riid
, void **ppv
);
153 virtual HRESULT
FillToolbar(BOOL clearFirst
=FALSE
);
154 virtual HRESULT
OnCommand(WPARAM wParam
, LPARAM lParam
, LRESULT
*theResult
);
155 virtual HRESULT
OnContextMenu(NMMOUSE
* rclick
);
158 virtual HRESULT
OnDeletingButton(const NMTOOLBAR
* tb
);
160 virtual HRESULT
InternalPopupItem(INT uItem
, INT index
, DWORD_PTR dwData
);
161 virtual HRESULT
InternalHasSubMenu(INT uItem
, INT index
, DWORD_PTR dwData
);