class CMenuBand;
class CMenuFocusManager;
-#define WM_USER_ISTRACKEDITEM (WM_USER+41)
-#define WM_USER_CHANGETRACKEDITEM (WM_USER+42)
-
+#define WM_USER_ISTRACKEDITEM (WM_APP+41)
+#define WM_USER_CHANGETRACKEDITEM (WM_APP+42)
class CMenuToolbarBase
{
private:
- HWND m_hwnd; // May be the pager
- HFONT m_marlett;
- BOOL m_useFlatMenus;
+ HWND m_hwnd; // May be the pager
+ HWND m_hwndToolbar;
+ HFONT m_marlett;
+ BOOL m_useFlatMenus;
WNDPROC m_SubclassOld;
- BOOL m_disableMouseTrack;
+ BOOL m_disableMouseTrack;
+ BOOL m_timerEnabled;
protected:
CMenuBand * m_menuBand;
- HWND m_hwndToolbar;
DWORD m_dwMenuFlags;
- BOOL m_hasIdealSize;
+ BOOL m_hasSizes;
SIZE m_idealSize;
+ SIZE m_itemSize;
BOOL m_usePager;
CMenuToolbarBase * m_hotBar;
INT m_hotItem;
CMenuToolbarBase * m_popupBar;
INT m_popupItem;
- DWORD m_toolbarFlags;
- BOOL m_isTracking;
+ DWORD m_initFlags;
+ BOOL m_isTrackingPopup;
private:
static LRESULT CALLBACK s_SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ LRESULT SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
public:
CMenuToolbarBase(CMenuBand *menuBand, BOOL usePager);
virtual ~CMenuToolbarBase();
HRESULT OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult);
- HRESULT OnHotItemChanged(CMenuToolbarBase * toolbar, INT item);
- HRESULT OnPopupItemChanged(CMenuToolbarBase * toolbar, INT item);
+ HRESULT ChangeHotItem(CMenuToolbarBase * toolbar, INT item, DWORD dwFlags);
+ HRESULT ChangePopupItem(CMenuToolbarBase * toolbar, INT item);
- HRESULT PopupSubMenu(UINT itemId, UINT index, IShellMenu* childShellMenu);
+ HRESULT PopupSubMenu(UINT itemId, UINT index, IShellMenu* childShellMenu, BOOL keyInitiated);
HRESULT PopupSubMenu(UINT itemId, UINT index, HMENU menu);
- HRESULT DoContextMenu(IContextMenu* contextMenu);
+ HRESULT TrackContextMenu(IContextMenu* contextMenu, POINT pt);
- HRESULT ChangeHotItem(DWORD changeType);
- HRESULT OnHotItemChange(const NMTBHOTITEM * hot, LRESULT * theResult);
+ HRESULT KeyboardItemChange(DWORD changeType);
+
+ HRESULT ExecuteItem(INT iItem);
HRESULT IsTrackedItem(INT index);
- HRESULT ChangeTrackedItem(INT index);
+ HRESULT ChangeTrackedItem(INT index, BOOL wasTracking, BOOL mouse);
- HRESULT GetIdealSize(SIZE& size);
+ HRESULT GetSizes(SIZE* pMinSize, SIZE* pMaxSize, SIZE* pIntegralSize);
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 CancelCurrentPopup();
+ HRESULT PopupItem(INT iItem, BOOL keyInitiated);
+ HRESULT GetDataFromId(INT iItem, INT* pIndex, DWORD_PTR* pData);
- HRESULT PopupItem(INT uItem);
- HRESULT HasSubMenu(INT uItem);
- HRESULT GetDataFromId(INT uItem, INT* pIndex, DWORD_PTR* pData);
+ HRESULT KillPopupTimer();
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);
+ virtual HRESULT InternalGetTooltip(INT iItem, INT index, DWORD_PTR dwData, LPWSTR pszText, INT cchTextMax) = 0;
+ virtual HRESULT InternalExecuteItem(INT iItem, INT index, DWORD_PTR dwData) = 0;
+ virtual HRESULT InternalPopupItem(INT iItem, INT index, DWORD_PTR dwData, BOOL keyInitiated) = 0;
+ virtual HRESULT InternalHasSubMenu(INT iItem, INT index, DWORD_PTR dwData) = 0;
+ virtual HRESULT InternalContextMenu(INT iItem, INT index, DWORD_PTR dwData, POINT pt) = 0;
HRESULT AddButton(DWORD commandId, LPCWSTR caption, BOOL hasSubMenu, INT iconId, DWORD_PTR buttonData, BOOL last);
HRESULT AddSeparator(BOOL last);
HRESULT AddPlaceholder();
+ HRESULT ClearToolbar();
- HRESULT UpdateImageLists();
+ HWND GetToolbar() { return m_hwndToolbar; }
private:
+ HRESULT UpdateImageLists();
+
+ HRESULT OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult);
+ HRESULT OnPagerCalcSize(LPNMPGCALCSIZE csize);
+ HRESULT OnPopupTimer(DWORD timerId);
+ HRESULT OnContextMenu(NMMOUSE * rclick);
HRESULT OnCustomDraw(LPNMTBCUSTOMDRAW cdraw, LRESULT * theResult);
+ HRESULT OnGetInfoTip(NMTBGETINFOTIP * tip);
};
class CMenuStaticToolbar :
public:
CMenuStaticToolbar(CMenuBand *menuBand);
- virtual ~CMenuStaticToolbar() {}
+ virtual ~CMenuStaticToolbar();
HRESULT SetMenu(HMENU hmenu, HWND hwnd, DWORD dwFlags);
HRESULT GetMenu(HMENU *phmenu, HWND *phwnd, DWORD *pdwFlags);
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);
+ virtual HRESULT InternalGetTooltip(INT iItem, INT index, DWORD_PTR dwData, LPWSTR pszText, INT cchTextMax);
+ virtual HRESULT InternalExecuteItem(INT iItem, INT index, DWORD_PTR dwData);
+ virtual HRESULT InternalPopupItem(INT iItem, INT index, DWORD_PTR dwData, BOOL keyInitiated);
+ virtual HRESULT InternalHasSubMenu(INT iItem, INT index, DWORD_PTR dwData);
+ virtual HRESULT InternalContextMenu(INT iItem, INT index, DWORD_PTR dwData, POINT pt);
};
class CMenuSFToolbar :
HRESULT GetShellFolder(DWORD *pdwFlags, LPITEMIDLIST *ppidl, REFIID riid, void **ppv);
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);
+ virtual HRESULT InternalGetTooltip(INT iItem, INT index, DWORD_PTR dwData, LPWSTR pszText, INT cchTextMax);
+ virtual HRESULT InternalExecuteItem(INT iItem, INT index, DWORD_PTR dwData);
+ virtual HRESULT InternalPopupItem(INT iItem, INT index, DWORD_PTR dwData, BOOL keyInitiated);
+ virtual HRESULT InternalHasSubMenu(INT iItem, INT index, DWORD_PTR dwData);
+ virtual HRESULT InternalContextMenu(INT iItem, INT index, DWORD_PTR dwData, POINT pt);
};