class CMenuBand;
class CMenuFocusManager;
+#define WM_USER_ISTRACKEDITEM (WM_USER+41)
+#define WM_USER_CHANGETRACKEDITEM (WM_USER+42)
+
+
class CMenuToolbarBase
{
private:
HWND m_hwnd; // May be the pager
HFONT m_marlett;
BOOL m_useFlatMenus;
+ WNDPROC m_SubclassOld;
+ BOOL m_disableMouseTrack;
protected:
CMenuBand * m_menuBand;
HWND m_hwndToolbar;
DWORD m_dwMenuFlags;
- INT m_hotItem;
- INT m_popupItem;
- WNDPROC m_SubclassOld;
BOOL m_hasIdealSize;
SIZE m_idealSize;
BOOL m_usePager;
+ CMenuToolbarBase * m_hotBar;
+ INT m_hotItem;
+ CMenuToolbarBase * m_popupBar;
+ INT m_popupItem;
+
+ DWORD m_toolbarFlags;
+ BOOL m_isTracking;
private:
static LRESULT CALLBACK s_SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
HRESULT OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult);
- virtual HRESULT FillToolbar() = 0;
- virtual HRESULT PopupItem(UINT uItem) = 0;
- virtual HRESULT HasSubMenu(UINT uItem) = 0;
- virtual HRESULT OnContextMenu(NMMOUSE * rclick) = 0;
+ HRESULT OnHotItemChanged(CMenuToolbarBase * toolbar, INT item);
+ HRESULT OnPopupItemChanged(CMenuToolbarBase * toolbar, INT item);
HRESULT PopupSubMenu(UINT itemId, UINT index, IShellMenu* childShellMenu);
- HRESULT PopupSubMenu(UINT index, HMENU menu);
+ HRESULT PopupSubMenu(UINT itemId, UINT index, HMENU menu);
HRESULT DoContextMenu(IContextMenu* contextMenu);
HRESULT ChangeHotItem(DWORD changeType);
- HRESULT OnHotItemChange(const NMTBHOTITEM * hot);
+ HRESULT OnHotItemChange(const NMTBHOTITEM * hot, LRESULT * theResult);
+
+ HRESULT IsTrackedItem(INT index);
+ HRESULT ChangeTrackedItem(INT index);
HRESULT GetIdealSize(SIZE& size);
HRESULT SetPosSize(int x, int y, int cx, int cy);
void InvalidateDraw();
+ HRESULT DisableMouseTrack(BOOL bDisable);
+
+ virtual HRESULT FillToolbar(BOOL clearFirst=FALSE) = 0;
+ virtual HRESULT OnContextMenu(NMMOUSE * rclick) = 0;
+
+ HRESULT PopupItem(INT uItem);
+ HRESULT HasSubMenu(INT uItem);
+ HRESULT GetDataFromId(INT uItem, INT* pIndex, DWORD_PTR* pData);
+
protected:
virtual HRESULT OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult);
+ virtual HRESULT OnDeletingButton(const NMTOOLBAR * tb) = 0;
+ virtual HRESULT InternalPopupItem(INT uItem, INT index, DWORD_PTR dwData) = 0;
+ virtual HRESULT InternalHasSubMenu(INT uItem, INT index, DWORD_PTR dwData) = 0;
+
LRESULT CALLBACK SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ HRESULT AddButton(DWORD commandId, LPCWSTR caption, BOOL hasSubMenu, INT iconId, DWORD_PTR buttonData, BOOL last);
+ HRESULT AddSeparator(BOOL last);
+ HRESULT AddPlaceholder();
+
HRESULT UpdateImageLists();
+
+private:
+ HRESULT OnCustomDraw(LPNMTBCUSTOMDRAW cdraw, LRESULT * theResult);
};
class CMenuStaticToolbar :
HRESULT SetMenu(HMENU hmenu, HWND hwnd, DWORD dwFlags);
HRESULT GetMenu(HMENU *phmenu, HWND *phwnd, DWORD *pdwFlags);
- virtual HRESULT FillToolbar();
- virtual HRESULT PopupItem(UINT uItem);
- virtual HRESULT HasSubMenu(UINT uItem);
+ virtual HRESULT FillToolbar(BOOL clearFirst=FALSE);
virtual HRESULT OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult);
virtual HRESULT OnContextMenu(NMMOUSE * rclick);
+protected:
+ virtual HRESULT OnDeletingButton(const NMTOOLBAR * tb);
+
+ virtual HRESULT InternalPopupItem(INT uItem, INT index, DWORD_PTR dwData);
+ virtual HRESULT InternalHasSubMenu(INT uItem, INT index, DWORD_PTR dwData);
};
class CMenuSFToolbar :
public CMenuToolbarBase
{
private:
- IShellFolder * m_shellFolder;
+ CComPtr<IShellFolder> m_shellFolder;
LPCITEMIDLIST m_idList;
HKEY m_hKey;
HRESULT SetShellFolder(IShellFolder *psf, LPCITEMIDLIST pidlFolder, HKEY hKey, DWORD dwFlags);
HRESULT GetShellFolder(DWORD *pdwFlags, LPITEMIDLIST *ppidl, REFIID riid, void **ppv);
- virtual HRESULT FillToolbar();
- virtual HRESULT PopupItem(UINT uItem);
- virtual HRESULT HasSubMenu(UINT uItem);
+ virtual HRESULT FillToolbar(BOOL clearFirst=FALSE);
virtual HRESULT OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult);
virtual HRESULT OnContextMenu(NMMOUSE * rclick);
-private:
- LPITEMIDLIST GetPidlFromId(UINT uItem, INT* pIndex = NULL);
+protected:
+ virtual HRESULT OnDeletingButton(const NMTOOLBAR * tb);
+
+ virtual HRESULT InternalPopupItem(INT uItem, INT index, DWORD_PTR dwData);
+ virtual HRESULT InternalHasSubMenu(INT uItem, INT index, DWORD_PTR dwData);
};