ReactOS  0.4.15-dev-2504-g2b52f3b
CMenuToolbarBase Class Referenceabstract

#include <CMenuToolbars.h>

Inheritance diagram for CMenuToolbarBase:
Collaboration diagram for CMenuToolbarBase:

Public Member Functions

 CMenuToolbarBase (CMenuBand *menuBand, BOOL usePager)
 
virtual ~CMenuToolbarBase ()
 
HRESULT IsWindowOwner (HWND hwnd)
 
HRESULT CreateToolbar (HWND hwndParent, DWORD dwFlags)
 
HRESULT GetWindow (HWND *phwnd)
 
HRESULT ShowDW (BOOL fShow)
 
HRESULT Close ()
 
HRESULT OnWinEvent (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
 
HRESULT ChangeHotItem (CMenuToolbarBase *toolbar, INT item, DWORD dwFlags)
 
HRESULT ChangePopupItem (CMenuToolbarBase *toolbar, INT item)
 
HRESULT PopupSubMenu (UINT itemId, UINT index, IShellMenu *childShellMenu, BOOL keyInitiated)
 
HRESULT PopupSubMenu (UINT itemId, UINT index, HMENU menu)
 
HRESULT TrackContextMenu (IContextMenu *contextMenu, POINT pt)
 
HRESULT KeyboardItemChange (DWORD changeType)
 
HRESULT PrepareExecuteItem (INT iItem)
 
HRESULT ExecuteItem ()
 
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
 
HRESULT CancelCurrentPopup ()
 
HRESULT PopupItem (INT iItem, BOOL keyInitiated)
 
HRESULT GetDataFromId (INT iItem, INT *pIndex, DWORD_PTR *pData)
 
HRESULT KillPopupTimer ()
 
HRESULT MenuBarMouseDown (INT iIndex, BOOL isLButton)
 
HRESULT MenuBarMouseUp (INT iIndex, BOOL isLButton)
 
HRESULT ProcessClick (INT iItem)
 
HRESULT ProcessContextMenu (INT iItem)
 
HRESULT BeforeCancelPopup ()
 

Protected Member Functions

virtual HRESULT OnDeletingButton (const NMTOOLBAR *tb)=0
 
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 ()
 
HWND GetToolbar ()
 

Protected Attributes

CMenuBandm_menuBand
 
DWORD m_dwMenuFlags
 
BOOL m_hasSizes
 
SIZE m_idealSize
 
SIZE m_itemSize
 
BOOL m_usePager
 
CMenuToolbarBasem_hotBar
 
INT m_hotItem
 
CMenuToolbarBasem_popupBar
 
INT m_popupItem
 
DWORD m_initFlags
 
BOOL m_isTrackingPopup
 
INT m_executeIndex
 
INT m_executeItem
 
DWORD_PTR m_executeData
 
BOOL m_cancelingPopup
 

Private Member Functions

HRESULT UpdateImageLists ()
 
HRESULT OnPagerCalcSize (LPNMPGCALCSIZE csize)
 
HRESULT OnCustomDraw (LPNMTBCUSTOMDRAW cdraw, LRESULT *theResult)
 
HRESULT OnGetInfoTip (NMTBGETINFOTIP *tip)
 
LRESULT IsTrackedItem (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT ChangeTrackedItem (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
LRESULT OnWinEventWrap (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 
HRESULT OnPopupTimer (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
 

Private Attributes

CContainedWindow m_pager
 
HFONT m_marlett
 
BOOL m_useFlatMenus
 
BOOL m_disableMouseTrack
 
BOOL m_timerEnabled
 

Detailed Description

Definition at line 28 of file CMenuToolbars.h.

Constructor & Destructor Documentation

◆ CMenuToolbarBase()

CMenuToolbarBase::CMenuToolbarBase ( CMenuBand menuBand,
BOOL  usePager 
)

Definition at line 265 of file CMenuToolbars.cpp.

265  :
266  m_pager(WC_PAGESCROLLER, this),
270  m_menuBand(menuBand),
271  m_dwMenuFlags(0),
272  m_hasSizes(FALSE),
273  m_usePager(usePager),
274  m_hotBar(NULL),
275  m_hotItem(-1),
276  m_popupBar(NULL),
277  m_popupItem(-1),
280 {
281  m_idealSize.cx = 0;
282  m_idealSize.cy = 0;
283  m_itemSize.cx = 0;
284  m_itemSize.cy = 0;
286  0, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET,
288  DEFAULT_QUALITY, FF_DONTCARE, L"Marlett");
289 }
#define WC_PAGESCROLLER
Definition: commctrl.h:4500
#define DEFAULT_QUALITY
Definition: wingdi.h:435
#define FF_DONTCARE
Definition: wingdi.h:447
#define DEFAULT_CHARSET
Definition: wingdi.h:383
#define FALSE
Definition: types.h:117
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
#define CreateFont
Definition: wingdi.h:4442
LONG cx
Definition: windef.h:334
CContainedWindow m_pager
Definition: CMenuToolbars.h:31
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
CMenuToolbarBase * m_hotBar
Definition: CMenuToolbars.h:45
static const WCHAR L[]
Definition: oid.c:1250
CMenuToolbarBase * m_popupBar
Definition: CMenuToolbars.h:47
#define NULL
Definition: types.h:112
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39
LONG cy
Definition: windef.h:335

◆ ~CMenuToolbarBase()

CMenuToolbarBase::~CMenuToolbarBase ( )
virtual

Definition at line 291 of file CMenuToolbars.cpp.

292 {
293  ClearToolbar();
294 
295  if (m_hWnd)
296  DestroyWindow();
297 
298  if (m_pager.m_hWnd)
299  m_pager.DestroyWindow();
300 
302 }
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
BOOL WINAPI DestroyWindow(_In_ HWND)
CContainedWindow m_pager
Definition: CMenuToolbars.h:31

Member Function Documentation

◆ AddButton()

HRESULT CMenuToolbarBase::AddButton ( DWORD  commandId,
LPCWSTR  caption,
BOOL  hasSubMenu,
INT  iconId,
DWORD_PTR  buttonData,
BOOL  last 
)
protected

Definition at line 985 of file CMenuToolbars.cpp.

986 {
987  TBBUTTON tbb = { 0 };
988 
989  tbb.fsState = TBSTATE_ENABLED;
990 #if !USE_TBSTYLE_EX_VERTICAL
991  if (!last && (m_initFlags & SMINIT_VERTICAL))
992  tbb.fsState |= TBSTATE_WRAP;
993 #endif
994  tbb.fsStyle = BTNS_CHECKGROUP;
995 
996  if (hasSubMenu && (m_initFlags & SMINIT_VERTICAL))
997  tbb.fsStyle |= BTNS_DROPDOWN;
998 
999  if (!(m_initFlags & SMINIT_VERTICAL))
1000  tbb.fsStyle |= BTNS_AUTOSIZE;
1001 
1002  tbb.iString = (INT_PTR) caption;
1003  tbb.idCommand = commandId;
1004 
1005  tbb.iBitmap = iconId;
1006  tbb.dwData = buttonData;
1007 
1008  m_hasSizes = FALSE;
1009 
1010  if (!AddButtons(1, &tbb))
1011  return HRESULT_FROM_WIN32(GetLastError());
1012  return S_OK;
1013 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
POINT last
Definition: font.c:46
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1044
#define BTNS_AUTOSIZE
Definition: commctrl.h:1004
int32_t INT_PTR
Definition: typedefs.h:64
BYTE fsStyle
Definition: commctrl.h:952
#define BTNS_CHECKGROUP
Definition: commctrl.h:1002
#define FALSE
Definition: types.h:117
INT_PTR iString
Definition: commctrl.h:959
DWORD_PTR dwData
Definition: commctrl.h:958
int iBitmap
Definition: commctrl.h:949
#define BTNS_DROPDOWN
Definition: commctrl.h:1003
int idCommand
Definition: commctrl.h:950
#define S_OK
Definition: intsafe.h:51
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define TBSTATE_WRAP
Definition: commctrl.h:977
BYTE fsState
Definition: commctrl.h:951

Referenced by CMenuStaticToolbar::FillToolbar(), and CMenuSFToolbar::FillToolbar().

◆ AddPlaceholder()

HRESULT CMenuToolbarBase::AddPlaceholder ( )
protected

Definition at line 1035 of file CMenuToolbars.cpp.

1036 {
1037  TBBUTTON tbb = { 0 };
1038  WCHAR MenuString[128];
1039 
1040  LoadStringW(GetModuleHandle(L"shell32.dll"), IDS_MENU_EMPTY, MenuString, _countof(MenuString));
1041 
1042  tbb.fsState = 0;
1043  tbb.fsStyle = 0;
1044  tbb.iString = (INT_PTR) MenuString;
1045  tbb.iBitmap = -1;
1046 
1047  m_hasSizes = FALSE;
1048 
1049  if (!AddButtons(1, &tbb))
1050  return HRESULT_FROM_WIN32(GetLastError());
1051 
1052  return S_OK;
1053 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1044
int32_t INT_PTR
Definition: typedefs.h:64
BYTE fsStyle
Definition: commctrl.h:952
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define FALSE
Definition: types.h:117
INT_PTR iString
Definition: commctrl.h:959
int iBitmap
Definition: commctrl.h:949
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define IDS_MENU_EMPTY
static const WCHAR L[]
Definition: oid.c:1250
#define S_OK
Definition: intsafe.h:51
#define GetModuleHandle
Definition: winbase.h:3683
BYTE fsState
Definition: commctrl.h:951

Referenced by CMenuSFToolbar::FillToolbar().

◆ AddSeparator()

HRESULT CMenuToolbarBase::AddSeparator ( BOOL  last)
protected

Definition at line 1015 of file CMenuToolbars.cpp.

1016 {
1017  TBBUTTON tbb = { 0 };
1018 
1019  tbb.fsState = TBSTATE_ENABLED;
1020 #if !USE_TBSTYLE_EX_VERTICAL
1021  if (!last && (m_initFlags & SMINIT_VERTICAL))
1022  tbb.fsState |= TBSTATE_WRAP;
1023 #endif
1024  tbb.fsStyle = BTNS_SEP;
1025  tbb.iBitmap = 0;
1026 
1027  m_hasSizes = FALSE;
1028 
1029  if (!AddButtons(1, &tbb))
1030  return HRESULT_FROM_WIN32(GetLastError());
1031 
1032  return S_OK;
1033 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
POINT last
Definition: font.c:46
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1044
BYTE fsStyle
Definition: commctrl.h:952
#define FALSE
Definition: types.h:117
int iBitmap
Definition: commctrl.h:949
#define BTNS_SEP
Definition: commctrl.h:999
#define S_OK
Definition: intsafe.h:51
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define TBSTATE_WRAP
Definition: commctrl.h:977
BYTE fsState
Definition: commctrl.h:951

Referenced by CMenuStaticToolbar::FillToolbar().

◆ BeforeCancelPopup()

HRESULT CMenuToolbarBase::BeforeCancelPopup ( )

Definition at line 792 of file CMenuToolbars.cpp.

793 {
795  TRACE("BeforeCancelPopup\n");
796  return S_OK;
797 }
#define TRUE
Definition: types.h:120
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuBand::_BeforeCancelPopup().

◆ CancelCurrentPopup()

HRESULT CMenuToolbarBase::CancelCurrentPopup ( )

Definition at line 1094 of file CMenuToolbars.cpp.

1095 {
1096  return m_menuBand->_CancelCurrentPopup();
1097 }
HRESULT _CancelCurrentPopup()
Definition: CMenuBand.cpp:1038
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39

Referenced by OnPopupTimer(), and PopupItem().

◆ ChangeHotItem()

HRESULT CMenuToolbarBase::ChangeHotItem ( CMenuToolbarBase toolbar,
INT  item,
DWORD  dwFlags 
)

Definition at line 576 of file CMenuToolbars.cpp.

577 {
578  // Ignore the change if it already matches the stored info
579  if (m_hotBar == toolbar && m_hotItem == item)
580  return S_FALSE;
581 
582  // Prevent a change of hot item if the change was triggered by the mouse,
583  // and mouse tracking is disabled.
585  {
586  TRACE("Hot item change prevented by DisableMouseTrack\n");
587  return S_OK;
588  }
589 
590  // Notify the toolbar if the hot-tracking left this toolbar
591  if (m_hotBar == this && toolbar != this)
592  {
593  SetHotItem(-1);
594  }
595 
596  TRACE("Hot item changed from %p %p, to %p %p\n", m_hotBar, m_hotItem, toolbar, item);
597  m_hotBar = toolbar;
598  m_hotItem = item;
599 
600  if (m_hotBar == this)
601  {
602  if (m_isTrackingPopup && !(m_initFlags & SMINIT_VERTICAL))
603  {
604  // If the menubar has an open submenu, switch to the new item's submenu immediately
606  }
607  else if (dwFlags & HICF_MOUSE)
608  {
609  // Vertical menus show/hide the submenu after a delay,
610  // but only with the mouse.
611  if (m_initFlags & SMINIT_VERTICAL)
612  {
613  DWORD elapsed = 0;
614  SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &elapsed, 0);
615  SetTimer(TIMERID_HOTTRACK, elapsed);
617  TRACE("SetTimer called with m_hotItem=%d\n", m_hotItem);
618  }
619  }
620  else
621  {
623  info.cbSize = sizeof(info);
624  info.dwMask = 0;
625 
626  int index = GetButtonInfo(item, &info);
627 
628  SetHotItem(index);
629  }
630  }
631 
632  InvalidateDraw();
633  return S_OK;
634 }
#define TRUE
Definition: types.h:120
#define SystemParametersInfo
Definition: winuser.h:5833
#define TIMERID_HOTTRACK
#define FALSE
Definition: types.h:117
#define S_FALSE
Definition: winerror.h:2357
#define HICF_MOUSE
Definition: commctrl.h:1326
HRESULT PopupItem(INT iItem, BOOL keyInitiated)
GLuint index
Definition: glext.h:6031
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
CMenuToolbarBase * m_hotBar
Definition: CMenuToolbars.h:45
struct _test_info info[]
Definition: SetCursorPos.c:19
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define S_OK
Definition: intsafe.h:51
static ATOM item
Definition: dde.c:856
#define TBBUTTONINFO
Definition: commctrl.h:1254

Referenced by CMenuBand::_ChangeHotItem().

◆ ChangePopupItem()

HRESULT CMenuToolbarBase::ChangePopupItem ( CMenuToolbarBase toolbar,
INT  item 
)

Definition at line 636 of file CMenuToolbars.cpp.

637 {
638  // Ignore the change if it already matches the stored info
639  if (m_popupBar == toolbar && m_popupItem == item)
640  return S_FALSE;
641 
642  // Notify the toolbar if the popup-tracking this toolbar
643  if (m_popupBar == this && toolbar != this)
644  {
645  CheckButton(m_popupItem, FALSE);
647  }
648 
649  m_popupBar = toolbar;
650  m_popupItem = item;
651 
652  if (m_popupBar == this)
653  {
654  CheckButton(m_popupItem, TRUE);
655  }
656 
657  InvalidateDraw();
658  return S_OK;
659 }
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define S_FALSE
Definition: winerror.h:2357
CMenuToolbarBase * m_popupBar
Definition: CMenuToolbars.h:47
#define S_OK
Definition: intsafe.h:51
static ATOM item
Definition: dde.c:856

Referenced by CMenuBand::_ChangePopupItem().

◆ ChangeTrackedItem()

LRESULT CMenuToolbarBase::ChangeTrackedItem ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 684 of file CMenuToolbars.cpp.

685 {
686  TBBUTTON btn;
687  BOOL wasTracking = LOWORD(lParam);
688  BOOL mouse = HIWORD(lParam);
689  INT idx = (INT)wParam;
690 
691  if (idx < 0)
692  {
695  }
696 
697  if (!GetButton(idx, &btn))
698  return E_FAIL;
699 
700  TRACE("ChangeTrackedItem %d, %d\n", idx, wasTracking);
701  m_isTrackingPopup = wasTracking;
702  return m_menuBand->_ChangeHotItem(this, btn.idCommand, mouse ? HICF_MOUSE : 0);
703 }
#define INT
Definition: polytest.cpp:20
#define E_FAIL
Definition: ddrawi.h:102
int32_t INT
Definition: typedefs.h:58
WPARAM wParam
Definition: combotst.c:138
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
HRESULT _ChangeHotItem(CMenuToolbarBase *tb, INT id, DWORD dwFlags)
Definition: CMenuBand.cpp:880
unsigned int idx
Definition: utils.c:41
#define HICF_MOUSE
Definition: commctrl.h:1326
#define TRACE(s)
Definition: solgame.cpp:4
int idCommand
Definition: commctrl.h:950
#define NULL
Definition: types.h:112
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39
#define HIWORD(l)
Definition: typedefs.h:247
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82

◆ ClearToolbar()

HRESULT CMenuToolbarBase::ClearToolbar ( )
protected

Definition at line 1055 of file CMenuToolbars.cpp.

1056 {
1057  while (DeleteButton(0))
1058  {
1059  // empty;
1060  }
1061  m_hasSizes = FALSE;
1062  return S_OK;
1063 }
#define FALSE
Definition: types.h:117
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuStaticToolbar::FillToolbar(), CMenuStaticToolbar::SetMenu(), CMenuSFToolbar::SetShellFolder(), and ~CMenuToolbarBase().

◆ Close()

HRESULT CMenuToolbarBase::Close ( )

Definition at line 358 of file CMenuToolbars.cpp.

359 {
360  if (m_hWnd)
361  DestroyWindow();
362 
363  if (m_pager.m_hWnd)
364  m_pager.DestroyWindow();
365 
366  return S_OK;
367 }
BOOL WINAPI DestroyWindow(_In_ HWND)
CContainedWindow m_pager
Definition: CMenuToolbars.h:31
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuBand::CloseDW().

◆ CreateToolbar()

HRESULT CMenuToolbarBase::CreateToolbar ( HWND  hwndParent,
DWORD  dwFlags 
)

Definition at line 369 of file CMenuToolbars.cpp.

370 {
375 
376  if (dwFlags & SMINIT_VERTICAL)
377  {
378  // Activate vertical semantics
379  tbStyles |= CCS_VERT;
380 
381 #if USE_TBSTYLE_EX_VERTICAL
382  tbExStyles |= TBSTYLE_EX_VERTICAL;
383 #endif
384  }
385 
387 
388  // Get a temporary rect to use while creating the toolbar window.
389  // Ensure that it is not a null rect.
390  RECT rc;
391  if (!::GetClientRect(hwndParent, &rc) ||
392  (rc.left == rc.right) ||
393  (rc.top == rc.bottom))
394  {
395  rc.left = 0;
396  rc.top = 0;
397  rc.right = 1;
398  rc.bottom = 1;
399  }
400 
401  // HACK & FIXME: CORE-17505
402  SubclassWindow(CToolbar::Create(hwndParent, tbStyles, tbExStyles));
403 
404  SetWindowTheme(m_hWnd, L"", L"");
405 
406  SystemParametersInfo(SPI_GETFLATMENU, 0, &m_useFlatMenus, 0);
407 
409 
410  // If needed, create the pager.
411  if (m_usePager)
412  {
413  LONG pgStyles = PGS_VERT | WS_CHILD | WS_VISIBLE;
414  LONG pgExStyles = 0;
415 
416  HWND hwndPager = CreateWindowEx(
417  pgExStyles, WC_PAGESCROLLER, NULL,
418  pgStyles, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top,
419  hwndParent, NULL, _AtlBaseModule.GetModuleInstance(), 0);
420 
421  m_pager.SubclassWindow(hwndPager);
422 
423  ::SetParent(m_hWnd, hwndPager);
424 
425  m_pager.SendMessageW(PGM_SETCHILD, 0, reinterpret_cast<LPARAM>(m_hWnd));
426  }
427 
428  // Configure the image lists
430 
431  return S_OK;
432 }
#define TBSTYLE_EX_DOUBLEBUFFER
Definition: commctrl.h:1014
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
HWND Create(HWND hWndParent, DWORD dwStyles=0, DWORD dwExStyles=0)
Definition: rosctrls.h:256
#define WC_PAGESCROLLER
Definition: commctrl.h:4500
#define TBSTYLE_CUSTOMERASE
Definition: commctrl.h:994
HWND WINAPI SetParent(_In_ HWND, _In_opt_ HWND)
#define TBSTYLE_TRANSPARENT
Definition: commctrl.h:996
#define SystemParametersInfo
Definition: winuser.h:5833
LONG top
Definition: windef.h:307
#define WS_CHILD
Definition: pedump.c:617
LONG left
Definition: windef.h:306
#define WS_CLIPCHILDREN
Definition: pedump.c:619
LONG right
Definition: windef.h:308
#define PGM_SETCHILD
Definition: commctrl.h:4516
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define CCS_VERT
Definition: commctrl.h:2249
#define CCS_NODIVIDER
Definition: commctrl.h:2248
#define TBSTYLE_REGISTERDROP
Definition: commctrl.h:995
long LONG
Definition: pedump.c:60
#define SubclassWindow(hwnd, lpfn)
Definition: windowsx.h:517
HRESULT UpdateImageLists()
HRESULT WINAPI SetWindowTheme(_In_ HWND hwnd, _In_ LPCWSTR pszSubAppName, _In_ LPCWSTR pszSubIdList)
Definition: uxthemesupp.c:69
#define CreateWindowEx
Definition: winuser.h:5730
static HWND hwndParent
Definition: cryptui.c:300
#define CCS_TOP
Definition: commctrl.h:2242
#define CCS_NOPARENTALIGN
Definition: commctrl.h:2246
CContainedWindow m_pager
Definition: CMenuToolbars.h:31
#define TBSTYLE_TOOLTIPS
Definition: commctrl.h:989
#define CCS_NORESIZE
Definition: commctrl.h:2245
static const WCHAR L[]
Definition: oid.c:1250
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
HRESULT AdjustForTheme(BOOL bFlatStyle)
Definition: CMenuBand.cpp:1156
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
#define PGS_VERT
Definition: commctrl.h:4502
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39
LONG bottom
Definition: windef.h:309
#define WS_VISIBLE
Definition: pedump.c:620
#define TBSTYLE_LIST
Definition: commctrl.h:993
#define TBSTYLE_FLAT
Definition: commctrl.h:992
#define TBSTYLE_EX_VERTICAL
Definition: commctrl.h:1011

Referenced by CMenuBand::SetMenu(), CMenuBand::SetShellFolder(), and CMenuBand::SetSite().

◆ DisableMouseTrack()

HRESULT CMenuToolbarBase::DisableMouseTrack ( BOOL  bDisable)

Definition at line 128 of file CMenuToolbars.cpp.

129 {
130  if (m_disableMouseTrack != bDisable)
131  {
132  m_disableMouseTrack = bDisable;
133  TRACE("DisableMouseTrack %d\n", bDisable);
134  }
135  return S_OK;
136 }
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuBand::_DisableMouseTrack().

◆ ExecuteItem()

HRESULT CMenuToolbarBase::ExecuteItem ( )

Definition at line 880 of file CMenuToolbars.cpp.

881 {
883 }
virtual HRESULT InternalExecuteItem(INT iItem, INT index, DWORD_PTR dwData)=0
DWORD_PTR m_executeData
Definition: CMenuToolbars.h:55

◆ FillToolbar()

virtual HRESULT CMenuToolbarBase::FillToolbar ( BOOL  clearFirst = FALSE)
pure virtual

Implemented in CMenuSFToolbar, and CMenuStaticToolbar.

◆ GetDataFromId()

HRESULT CMenuToolbarBase::GetDataFromId ( INT  iItem,
INT pIndex,
DWORD_PTR pData 
)

Definition at line 1065 of file CMenuToolbars.cpp.

1066 {
1067  if (pData)
1068  *pData = NULL;
1069 
1070  if (pIndex)
1071  *pIndex = -1;
1072 
1073  if (iItem < 0)
1074  return S_OK;
1075 
1076  TBBUTTONINFO info = { 0 };
1077 
1078  info.cbSize = sizeof(TBBUTTONINFO);
1079  info.dwMask = TBIF_COMMAND | TBIF_LPARAM;
1080 
1081  int index = GetButtonInfo(iItem, &info);
1082  if (index < 0)
1083  return E_FAIL;
1084 
1085  if (pIndex)
1086  *pIndex = index;
1087 
1088  if (pData)
1089  *pData = info.lParam;
1090 
1091  return S_OK;
1092 }
#define TBIF_COMMAND
Definition: commctrl.h:1224
#define TBIF_LPARAM
Definition: commctrl.h:1223
#define E_FAIL
Definition: ddrawi.h:102
GLuint index
Definition: glext.h:6031
#define index(s, c)
Definition: various.h:29
#define S_OK
Definition: intsafe.h:51
_Out_ PULONG _Out_ PULONG pIndex
Definition: ndis.h:4564
#define NULL
Definition: types.h:112
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1827
#define TBBUTTONINFO
Definition: commctrl.h:1254

Referenced by OnGetInfoTip(), PopupItem(), PrepareExecuteItem(), and ProcessContextMenu().

◆ GetSizes()

HRESULT CMenuToolbarBase::GetSizes ( SIZE pMinSize,
SIZE pMaxSize,
SIZE pIntegralSize 
)

Definition at line 434 of file CMenuToolbars.cpp.

435 {
436  if (pMinSize)
437  *pMinSize = m_idealSize;
438  if (pMaxSize)
439  *pMaxSize = m_idealSize;
440  if (pIntegralSize)
441  *pIntegralSize = m_itemSize;
442 
443  if (m_hasSizes)
444  return S_OK;
445 
446  TRACE("Sizes out of date, recalculating.\n");
447 
448  if (!m_hWnd)
449  {
450  return S_OK;
451  }
452 
453  // Obtain the ideal size, to be used as min and max
454  GetMaxSize(&m_idealSize);
455  GetIdealSize((m_initFlags & SMINIT_VERTICAL) != 0, &m_idealSize);
456 
457  TRACE("Ideal Size: (%d, %d) for %d buttons\n", m_idealSize, GetButtonCount());
458 
459  // Obtain the button size, to be used as the integral size
460  DWORD size = GetButtonSize();
463  m_hasSizes = TRUE;
464 
465  if (pMinSize)
466  *pMinSize = m_idealSize;
467  if (pMaxSize)
468  *pMaxSize = m_idealSize;
469  if (pIntegralSize)
470  *pIntegralSize = m_itemSize;
471 
472  return S_OK;
473 }
#define TRUE
Definition: types.h:120
#define GET_X_LPARAM(lp)
Definition: windowsx.h:274
LONG cx
Definition: windef.h:334
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
unsigned long DWORD
Definition: ntddk_ex.h:95
#define S_OK
Definition: intsafe.h:51
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:275
LONG cy
Definition: windef.h:335

Referenced by CMenuBand::GetBandInfo(), OnPagerCalcSize(), and CMenuBand::OnPosRectChangeDB().

◆ GetToolbar()

HWND CMenuToolbarBase::GetToolbar ( )
inlineprotected

Definition at line 118 of file CMenuToolbars.h.

118 { return m_hWnd; }

Referenced by CMenuSFToolbar::FillToolbar(), and CMenuSFToolbar::InternalContextMenu().

◆ GetWindow()

HRESULT CMenuToolbarBase::GetWindow ( HWND phwnd)

Definition at line 506 of file CMenuToolbars.cpp.

507 {
508  if (!phwnd)
509  return E_FAIL;
510 
511  if (m_pager.m_hWnd)
512  *phwnd = m_pager.m_hWnd;
513  else
514  *phwnd = m_hWnd;
515 
516  return S_OK;
517 }
#define E_FAIL
Definition: ddrawi.h:102
CContainedWindow m_pager
Definition: CMenuToolbars.h:31
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuBand::GetWindow().

◆ InternalContextMenu()

virtual HRESULT CMenuToolbarBase::InternalContextMenu ( INT  iItem,
INT  index,
DWORD_PTR  dwData,
POINT  pt 
)
protectedpure virtual

Implemented in CMenuSFToolbar, and CMenuStaticToolbar.

Referenced by ProcessContextMenu().

◆ InternalExecuteItem()

virtual HRESULT CMenuToolbarBase::InternalExecuteItem ( INT  iItem,
INT  index,
DWORD_PTR  dwData 
)
protectedpure virtual

Implemented in CMenuSFToolbar, and CMenuStaticToolbar.

Referenced by ExecuteItem().

◆ InternalGetTooltip()

virtual HRESULT CMenuToolbarBase::InternalGetTooltip ( INT  iItem,
INT  index,
DWORD_PTR  dwData,
LPWSTR  pszText,
INT  cchTextMax 
)
protectedpure virtual

Implemented in CMenuSFToolbar, and CMenuStaticToolbar.

Referenced by OnGetInfoTip().

◆ InternalHasSubMenu()

virtual HRESULT CMenuToolbarBase::InternalHasSubMenu ( INT  iItem,
INT  index,
DWORD_PTR  dwData 
)
protectedpure virtual

Implemented in CMenuSFToolbar, and CMenuStaticToolbar.

Referenced by PopupItem().

◆ InternalPopupItem()

virtual HRESULT CMenuToolbarBase::InternalPopupItem ( INT  iItem,
INT  index,
DWORD_PTR  dwData,
BOOL  keyInitiated 
)
protectedpure virtual

Implemented in CMenuSFToolbar, and CMenuStaticToolbar.

Referenced by PopupItem().

◆ InvalidateDraw()

void CMenuToolbarBase::InvalidateDraw ( )

Definition at line 304 of file CMenuToolbars.cpp.

305 {
307 }
#define FALSE
Definition: types.h:117
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define NULL
Definition: types.h:112

Referenced by ChangeHotItem(), and ChangePopupItem().

◆ IsTrackedItem()

LRESULT CMenuToolbarBase::IsTrackedItem ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 661 of file CMenuToolbars.cpp.

662 {
663  TBBUTTON btn;
664  INT idx = (INT)wParam;
665 
666  if (m_hotBar != this)
667  return S_FALSE;
668 
669  if (idx < 0)
670  return S_FALSE;
671 
672  if (!GetButton(idx, &btn))
673  return E_FAIL;
674 
675  if (m_hotItem == btn.idCommand)
676  return S_OK;
677 
678  if (m_popupItem == btn.idCommand)
679  return S_OK;
680 
681  return S_FALSE;
682 }
#define INT
Definition: polytest.cpp:20
#define E_FAIL
Definition: ddrawi.h:102
int32_t INT
Definition: typedefs.h:58
WPARAM wParam
Definition: combotst.c:138
unsigned int idx
Definition: utils.c:41
#define S_FALSE
Definition: winerror.h:2357
CMenuToolbarBase * m_hotBar
Definition: CMenuToolbars.h:45
int idCommand
Definition: commctrl.h:950
#define S_OK
Definition: intsafe.h:51

◆ IsWindowOwner()

HRESULT CMenuToolbarBase::IsWindowOwner ( HWND  hwnd)

Definition at line 499 of file CMenuToolbars.cpp.

500 {
501  if (m_hWnd && m_hWnd == hwnd) return S_OK;
502  if (m_pager.m_hWnd && m_pager.m_hWnd == hwnd) return S_OK;
503  return S_FALSE;
504 }
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define S_FALSE
Definition: winerror.h:2357
CContainedWindow m_pager
Definition: CMenuToolbars.h:31
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuBand::_MenuBarMouseDown(), CMenuBand::_MenuBarMouseUp(), CMenuBand::IsWindowOwner(), and CMenuBand::OnWinEvent().

◆ KeyboardItemChange()

HRESULT CMenuToolbarBase::KeyboardItemChange ( DWORD  changeType)

Definition at line 885 of file CMenuToolbars.cpp.

886 {
887  int prev = m_hotItem;
888  int index = -1;
889 
890  if (dwSelectType != 0xFFFFFFFF)
891  {
892  int count = GetButtonCount();
893 
894  if (dwSelectType == VK_HOME)
895  {
896  index = 0;
897  dwSelectType = VK_DOWN;
898  }
899  else if (dwSelectType == VK_END)
900  {
901  index = count - 1;
902  dwSelectType = VK_UP;
903  }
904  else
905  {
906  if (m_hotItem >= 0)
907  {
908  TBBUTTONINFO info = { 0 };
909  info.cbSize = sizeof(TBBUTTONINFO);
910  info.dwMask = 0;
911  index = GetButtonInfo(m_hotItem, &info);
912  }
913 
914  if (index < 0)
915  {
916  if (dwSelectType == VK_UP)
917  {
918  index = count - 1;
919  }
920  else if (dwSelectType == VK_DOWN)
921  {
922  index = 0;
923  }
924  }
925  else
926  {
927  if (dwSelectType == VK_UP)
928  {
929  index--;
930  }
931  else if (dwSelectType == VK_DOWN)
932  {
933  index++;
934  }
935  }
936  }
937 
938  TBBUTTON btn = { 0 };
939  while (index >= 0 && index < count)
940  {
941  DWORD res = GetButton(index, &btn);
942  if (!res)
943  return E_FAIL;
944 
945  if (btn.dwData)
946  {
947  if (prev != btn.idCommand)
948  {
949  TRACE("Setting Hot item to %d\n", index);
950  if (!(m_initFlags & SMINIT_VERTICAL) && m_isTrackingPopup)
951  {
952  HWND tlw;
954  ::SendMessageW(tlw, WM_CANCELMODE, 0, 0);
956  }
957  else
958  m_menuBand->_ChangeHotItem(this, btn.idCommand, 0);
959  }
960  return S_OK;
961  }
962 
963  if (dwSelectType == VK_UP)
964  {
965  index--;
966  }
967  else if (dwSelectType == VK_DOWN)
968  {
969  index++;
970  }
971  }
972 
973  return S_FALSE;
974  }
975 
976  if (prev != -1)
977  {
978  TRACE("Setting Hot item to null\n");
979  m_menuBand->_ChangeHotItem(NULL, -1, 0);
980  }
981 
982  return S_FALSE;
983 }
HRESULT _GetTopLevelWindow(HWND *topLevel)
Definition: CMenuBand.cpp:874
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define MAKELPARAM(l, h)
Definition: winuser.h:3983
#define VK_DOWN
Definition: winuser.h:2202
#define E_FAIL
Definition: ddrawi.h:102
#define WM_USER_CHANGETRACKEDITEM
Definition: CMenuToolbars.h:26
#define VK_HOME
Definition: winuser.h:2198
#define VK_UP
Definition: winuser.h:2200
#define FALSE
Definition: types.h:117
HRESULT _ChangeHotItem(CMenuToolbarBase *tb, INT id, DWORD dwFlags)
Definition: CMenuBand.cpp:880
#define S_FALSE
Definition: winerror.h:2357
GLuint index
Definition: glext.h:6031
DWORD_PTR dwData
Definition: commctrl.h:958
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
int idCommand
Definition: commctrl.h:950
#define WM_CANCELMODE
Definition: winuser.h:1617
#define S_OK
Definition: intsafe.h:51
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define NULL
Definition: types.h:112
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
GLuint res
Definition: glext.h:9613
#define VK_END
Definition: winuser.h:2197
#define TBBUTTONINFO
Definition: commctrl.h:1254

◆ KillPopupTimer()

HRESULT CMenuToolbarBase::KillPopupTimer ( )

Definition at line 565 of file CMenuToolbars.cpp.

566 {
567  if (m_timerEnabled)
568  {
571  return S_OK;
572  }
573  return S_FALSE;
574 }
#define TIMERID_HOTTRACK
#define FALSE
Definition: types.h:117
#define S_FALSE
Definition: winerror.h:2357
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuBand::_KillPopupTimers().

◆ MenuBarMouseDown()

HRESULT CMenuToolbarBase::MenuBarMouseDown ( INT  iIndex,
BOOL  isLButton 
)

Definition at line 838 of file CMenuToolbars.cpp.

839 {
840  TBBUTTON btn;
841 
842  GetButton(iIndex, &btn);
843 
844  if ((m_initFlags & SMINIT_VERTICAL)
845  || m_popupBar
846  || m_cancelingPopup)
847  {
849  return S_OK;
850  }
851 
852  return ProcessClick(btn.idCommand);
853 }
HRESULT ProcessClick(INT iItem)
#define FALSE
Definition: types.h:117
int idCommand
Definition: commctrl.h:950
CMenuToolbarBase * m_popupBar
Definition: CMenuToolbars.h:47
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuBand::_MenuBarMouseDown().

◆ MenuBarMouseUp()

HRESULT CMenuToolbarBase::MenuBarMouseUp ( INT  iIndex,
BOOL  isLButton 
)

Definition at line 855 of file CMenuToolbars.cpp.

856 {
857  TBBUTTON btn;
858 
860 
861  if (!(m_initFlags & SMINIT_VERTICAL))
862  return S_OK;
863 
864  GetButton(iIndex, &btn);
865 
866  if (isLButton)
867  return ProcessClick(btn.idCommand);
868  else
869  return ProcessContextMenu(btn.idCommand);
870 }
HRESULT ProcessClick(INT iItem)
#define FALSE
Definition: types.h:117
HRESULT ProcessContextMenu(INT iItem)
int idCommand
Definition: commctrl.h:950
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuBand::_MenuBarMouseUp().

◆ OnCustomDraw()

HRESULT CMenuToolbarBase::OnCustomDraw ( LPNMTBCUSTOMDRAW  cdraw,
LRESULT theResult 
)
private

Definition at line 153 of file CMenuToolbars.cpp.

154 {
155  bool isHot, isPopup, isActive;
156  TBBUTTONINFO btni;
157 
158  switch (cdraw->nmcd.dwDrawStage)
159  {
160  case CDDS_PREPAINT:
161  *theResult = CDRF_NOTIFYITEMDRAW;
162  return S_OK;
163 
164  case CDDS_ITEMPREPAINT:
165 
166  HWND tlw;
168 
169  // The item with an active submenu gets the CHECKED flag.
170  isHot = m_hotBar == this && (int) cdraw->nmcd.dwItemSpec == m_hotItem;
171  isPopup = m_popupBar == this && (int) cdraw->nmcd.dwItemSpec == m_popupItem;
172  isActive = (GetForegroundWindow() == tlw) || (m_popupBar == this);
173 
174  if (m_hotItem < 0 && isPopup)
175  isHot = TRUE;
176 
177  if ((m_useFlatMenus && isHot) || (m_initFlags & SMINIT_VERTICAL))
178  {
179  COLORREF clrText;
180  HBRUSH bgBrush;
181  RECT rc = cdraw->nmcd.rc;
182  HDC hdc = cdraw->nmcd.hdc;
183 
184  // Remove HOT and CHECKED flags (will restore HOT if necessary)
185  cdraw->nmcd.uItemState &= ~(CDIS_HOT | CDIS_CHECKED);
186 
187  // Decide on the colors
188  if (isHot)
189  {
190  cdraw->nmcd.uItemState |= CDIS_HOT;
191 
192  clrText = GetSysColor(COLOR_HIGHLIGHTTEXT);
193  bgBrush = GetSysColorBrush(m_useFlatMenus ? COLOR_MENUHILIGHT : COLOR_HIGHLIGHT);
194  }
195  else
196  {
197  clrText = GetSysColor(COLOR_MENUTEXT);
198  bgBrush = GetSysColorBrush(COLOR_MENU);
199  }
200 
201  // Paint the background color with the selected color
202  FillRect(hdc, &rc, bgBrush);
203 
204  // Set the text color in advance, this color will be assigned when the ITEMPOSTPAINT triggers
205  SetTextColor(hdc, clrText);
206 
207  // Set the text color, will be used by the internal drawing code
208  cdraw->clrText = clrText;
209  cdraw->iListGap += 4;
210 
211  // Tell the default drawing code we don't want any fanciness, not even a background.
212  *theResult = CDRF_NOTIFYPOSTPAINT | TBCDRF_NOBACKGROUND | TBCDRF_NOEDGES | TBCDRF_NOOFFSET | TBCDRF_NOMARK | 0x00800000; // FIXME: the last bit is Vista+, useful for debugging only
213  }
214  else
215  {
216  // Set the text color, will be used by the internal drawing code
217  cdraw->clrText = GetSysColor(isActive ? COLOR_MENUTEXT : COLOR_GRAYTEXT);
218 
219  // Remove HOT and CHECKED flags (will restore HOT if necessary)
220  cdraw->nmcd.uItemState &= ~CDIS_HOT;
221 
222  // Decide on the colors
223  if (isHot)
224  {
225  cdraw->nmcd.uItemState |= CDIS_HOT;
226  }
227 
228  *theResult = 0;
229  }
230 
231  return S_OK;
232 
233  case CDDS_ITEMPOSTPAINT:
234 
235  // Fetch the button style
236  btni.cbSize = sizeof(btni);
237  btni.dwMask = TBIF_STYLE;
238  GetButtonInfo(cdraw->nmcd.dwItemSpec, &btni);
239 
240  // Check if we need to draw a submenu arrow
241  if (btni.fsStyle & BTNS_DROPDOWN)
242  {
243  // TODO: Support RTL text modes by drawing a leftwards arrow aligned to the left of the control
244 
245  // "8" is the rightwards dropdown arrow in the Marlett font
246  WCHAR text [] = L"8";
247 
248  // Configure the font to draw with Marlett, keeping the current background color as-is
249  SelectObject(cdraw->nmcd.hdc, m_marlett);
250  SetBkMode(cdraw->nmcd.hdc, TRANSPARENT);
251 
252  // Tweak the alignment by 1 pixel so the menu draws like the Windows start menu.
253  RECT rc = cdraw->nmcd.rc;
254  rc.right += 1;
255 
256  // The arrow is drawn at the right of the item's rect, aligned vertically.
258  }
259  *theResult = TRUE;
260  return S_OK;
261  }
262  return S_OK;
263 }
#define COLOR_HIGHLIGHT
Definition: winuser.h:916
#define DrawTextEx
Definition: winuser.h:5747
#define CDRF_NOTIFYPOSTPAINT
Definition: commctrl.h:274
#define TRUE
Definition: types.h:120
const WCHAR * text
Definition: package.c:1827
HRESULT _GetTopLevelWindow(HWND *topLevel)
Definition: CMenuBand.cpp:874
#define TBCDRF_NOOFFSET
Definition: commctrl.h:1035
#define TBIF_STYLE
Definition: commctrl.h:1222
static HDC
Definition: imagelist.c:92
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1499
#define CDDS_ITEMPREPAINT
Definition: commctrl.h:285
#define DT_RIGHT
Definition: winuser.h:538
LONG right
Definition: windef.h:308
#define TBCDRF_NOEDGES
Definition: commctrl.h:1033
DWORD WINAPI GetSysColor(_In_ int)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1034
#define TRANSPARENT
Definition: wingdi.h:949
COLORREF clrText
Definition: commctrl.h:1021
#define COLOR_MENU
Definition: winuser.h:907
#define CDRF_NOTIFYITEMDRAW
Definition: commctrl.h:275
#define DT_VCENTER
Definition: winuser.h:543
#define COLOR_HIGHLIGHTTEXT
Definition: winuser.h:917
NMCUSTOMDRAW nmcd
Definition: commctrl.h:1017
__wchar_t WCHAR
Definition: xmlstorage.h:180
DWORD COLORREF
Definition: windef.h:300
#define CDIS_HOT
Definition: commctrl.h:297
#define COLOR_MENUTEXT
Definition: winuser.h:910
CMenuToolbarBase * m_hotBar
Definition: CMenuToolbars.h:45
#define CDIS_CHECKED
Definition: commctrl.h:294
#define TBCDRF_NOMARK
Definition: commctrl.h:1036
#define CDDS_PREPAINT
Definition: commctrl.h:280
#define COLOR_GRAYTEXT
Definition: winuser.h:922
static const WCHAR L[]
Definition: oid.c:1250
#define BTNS_DROPDOWN
Definition: commctrl.h:1003
HDC hdc
Definition: main.c:9
CMenuToolbarBase * m_popupBar
Definition: CMenuToolbars.h:47
#define DT_NOCLIP
Definition: winuser.h:536
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:888
#define DT_SINGLELINE
Definition: winuser.h:540
#define S_OK
Definition: intsafe.h:51
DWORD_PTR dwItemSpec
Definition: commctrl.h:307
#define TBCDRF_NOBACKGROUND
Definition: commctrl.h:1040
#define NULL
Definition: types.h:112
HWND WINAPI GetForegroundWindow(void)
Definition: ntwrapper.h:392
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39
#define CDDS_ITEMPOSTPAINT
Definition: commctrl.h:286
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HBRUSH WINAPI GetSysColorBrush(_In_ int)
#define TBBUTTONINFO
Definition: commctrl.h:1254
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by OnWinEvent().

◆ OnDeletingButton()

virtual HRESULT CMenuToolbarBase::OnDeletingButton ( const NMTOOLBAR tb)
protectedpure virtual

Implemented in CMenuSFToolbar, and CMenuStaticToolbar.

Referenced by OnWinEvent().

◆ OnGetInfoTip()

HRESULT CMenuToolbarBase::OnGetInfoTip ( NMTBGETINFOTIP tip)
private

Definition at line 519 of file CMenuToolbars.cpp.

520 {
521  INT index;
523 
524  INT iItem = tip->iItem;
525 
526  GetDataFromId(iItem, &index, &dwData);
527 
528  return InternalGetTooltip(iItem, index, dwData, tip->pszText, tip->cchTextMax);
529 }
HRESULT GetDataFromId(INT iItem, INT *pIndex, DWORD_PTR *pData)
static HANDLE ULONG_PTR dwData
Definition: file.c:35
int32_t INT
Definition: typedefs.h:58
GLuint index
Definition: glext.h:6031
#define index(s, c)
Definition: various.h:29
uint32_t DWORD_PTR
Definition: typedefs.h:65
virtual HRESULT InternalGetTooltip(INT iItem, INT index, DWORD_PTR dwData, LPWSTR pszText, INT cchTextMax)=0

Referenced by OnWinEvent().

◆ OnPagerCalcSize()

HRESULT CMenuToolbarBase::OnPagerCalcSize ( LPNMPGCALCSIZE  csize)
private

Definition at line 138 of file CMenuToolbars.cpp.

139 {
140  SIZE tbs;
141  GetSizes(NULL, &tbs, NULL);
142  if (csize->dwFlag == PGF_CALCHEIGHT)
143  {
144  csize->iHeight = tbs.cy;
145  }
146  else if (csize->dwFlag == PGF_CALCWIDTH)
147  {
148  csize->iWidth = tbs.cx;
149  }
150  return S_OK;
151 }
#define PGF_CALCHEIGHT
Definition: commctrl.h:4583
#define PGF_CALCWIDTH
Definition: commctrl.h:4582
LONG cx
Definition: windef.h:334
DWORD dwFlag
Definition: commctrl.h:4587
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
LONG cy
Definition: windef.h:335
HRESULT GetSizes(SIZE *pMinSize, SIZE *pMaxSize, SIZE *pIntegralSize)

Referenced by OnWinEvent().

◆ OnPopupTimer()

HRESULT CMenuToolbarBase::OnPopupTimer ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 531 of file CMenuToolbars.cpp.

532 {
533  if (wParam != TIMERID_HOTTRACK)
534  {
535  bHandled = FALSE;
536  return 0;
537  }
538 
540 
541  if (!m_timerEnabled)
542  return 0;
543 
545 
546  if (m_hotItem < 0)
547  return 0;
548 
549  // Returns S_FALSE if the current item did not show a submenu
551  if (hr != S_FALSE)
552  return 0;
553 
554  // If we didn't switch submenus, cancel the current popup regardless
555  if (m_popupBar)
556  {
558  if (FAILED_UNEXPECTEDLY(hr))
559  return 0;
560  }
561 
562  return 0;
563 }
HRESULT hr
Definition: shlfolder.c:183
WPARAM wParam
Definition: combotst.c:138
#define TIMERID_HOTTRACK
#define FALSE
Definition: types.h:117
#define S_FALSE
Definition: winerror.h:2357
HRESULT PopupItem(INT iItem, BOOL keyInitiated)
LONG HRESULT
Definition: typedefs.h:79
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:71
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
CMenuToolbarBase * m_popupBar
Definition: CMenuToolbars.h:47
HRESULT CancelCurrentPopup()

◆ OnWinEvent()

HRESULT CMenuToolbarBase::OnWinEvent ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
LRESULT theResult 
)

Definition at line 46 of file CMenuToolbars.cpp.

47 {
48  NMHDR * hdr;
49  HRESULT hr;
51 
52  if (theResult)
53  *theResult = 0;
54  switch (uMsg)
55  {
56  case WM_COMMAND:
57  //return OnCommand(wParam, lParam, theResult);
58  return S_OK;
59 
60  case WM_NOTIFY:
61  hdr = reinterpret_cast<LPNMHDR>(lParam);
62  switch (hdr->code)
63  {
64  case TBN_DELETINGBUTTON:
65  return OnDeletingButton(reinterpret_cast<LPNMTOOLBAR>(hdr));
66 
67  case PGN_CALCSIZE:
68  return OnPagerCalcSize(reinterpret_cast<LPNMPGCALCSIZE>(hdr));
69 
70  case TBN_DROPDOWN:
71  return ProcessClick(reinterpret_cast<LPNMTOOLBAR>(hdr)->iItem);
72 
73  case TBN_HOTITEMCHANGE:
74  //return OnHotItemChange(reinterpret_cast<LPNMTBHOTITEM>(hdr), theResult);
75  return S_OK;
76 
77  case NM_CUSTOMDRAW:
78  hr = OnCustomDraw(reinterpret_cast<LPNMTBCUSTOMDRAW>(hdr), &result);
79  if (theResult)
80  *theResult = result;
81  return hr;
82 
83  case TBN_GETINFOTIP:
84  return OnGetInfoTip(reinterpret_cast<LPNMTBGETINFOTIP>(hdr));
85 
86  // Silence unhandled items so that they don't print as unknown
87  case RBN_CHILDSIZE:
88  return S_OK;
89 
90  case TTN_GETDISPINFO:
91  return S_OK;
92 
93  case NM_RELEASEDCAPTURE:
94  break;
95 
96  case NM_CLICK:
97  case NM_RDOWN:
98  case NM_LDOWN:
99  break;
100 
101  case TBN_GETDISPINFO:
102  break;
103 
104  case TBN_BEGINDRAG:
105  case TBN_ENDDRAG:
106  break;
107 
108  case NM_TOOLTIPSCREATED:
109  break;
110 
111  case TBN_DRAGOUT: return S_FALSE;
112 
113  default:
114  TRACE("WM_NOTIFY unknown code %d, %d\n", hdr->code, hdr->idFrom);
115  return S_OK;
116  }
117  return S_FALSE;
118  case WM_WININICHANGE:
119  if (wParam == SPI_SETFLATMENU)
120  {
121  SystemParametersInfo(SPI_GETFLATMENU, 0, &m_useFlatMenus, 0);
122  }
123  }
124 
125  return S_FALSE;
126 }
HRESULT ProcessClick(INT iItem)
char hdr[14]
Definition: iptest.cpp:33
#define TBN_GETDISPINFO
Definition: commctrl.h:1420
HRESULT OnCustomDraw(LPNMTBCUSTOMDRAW cdraw, LRESULT *theResult)
HRESULT hr
Definition: shlfolder.c:183
GLuint64EXT * result
Definition: glext.h:11304
UINT uMsg
Definition: menu.cpp:213
#define TBN_BEGINDRAG
Definition: commctrl.h:1307
#define NM_RELEASEDCAPTURE
Definition: commctrl.h:141
#define SystemParametersInfo
Definition: winuser.h:5833
#define TBN_DRAGOUT
Definition: commctrl.h:1337
WPARAM wParam
Definition: combotst.c:138
#define TBN_HOTITEMCHANGE
Definition: commctrl.h:1336
HRESULT OnGetInfoTip(NMTBGETINFOTIP *tip)
#define PGN_CALCSIZE
Definition: commctrl.h:4580
#define TBN_DROPDOWN
Definition: commctrl.h:1316
#define TTN_GETDISPINFO
Definition: commctrl.h:1878
#define S_FALSE
Definition: winerror.h:2357
#define RBN_CHILDSIZE
Definition: commctrl.h:1636
#define WM_WININICHANGE
Definition: winuser.h:1612
#define TBN_ENDDRAG
Definition: commctrl.h:1308
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
virtual HRESULT OnDeletingButton(const NMTOOLBAR *tb)=0
HRESULT OnPagerCalcSize(LPNMPGCALCSIZE csize)
#define NM_CUSTOMDRAW
Definition: commctrl.h:137
#define WM_COMMAND
Definition: winuser.h:1722
#define NM_CLICK
Definition: commctrl.h:130
#define TBN_GETINFOTIP
Definition: commctrl.h:1392
#define S_OK
Definition: intsafe.h:51
#define NM_LDOWN
Definition: commctrl.h:145
LONG_PTR LRESULT
Definition: windef.h:209
#define NM_TOOLTIPSCREATED
Definition: commctrl.h:144
LPARAM lParam
Definition: combotst.c:139
#define TBN_DELETINGBUTTON
Definition: commctrl.h:1338
#define NM_RDOWN
Definition: commctrl.h:146
#define WM_NOTIFY
Definition: richedit.h:61

Referenced by CMenuBand::OnWinEvent(), and OnWinEventWrap().

◆ OnWinEventWrap()

LRESULT CMenuToolbarBase::OnWinEventWrap ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL bHandled 
)
private

Definition at line 39 of file CMenuToolbars.cpp.

40 {
41  LRESULT lr;
42  bHandled = OnWinEvent(m_hWnd, uMsg, wParam, lParam, &lr) != S_FALSE;
43  return lr;
44 }
UINT uMsg
Definition: menu.cpp:213
WPARAM wParam
Definition: combotst.c:138
#define S_FALSE
Definition: winerror.h:2357
HRESULT OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
LONG_PTR LRESULT
Definition: windef.h:209
LPARAM lParam
Definition: combotst.c:139

◆ PopupItem()

HRESULT CMenuToolbarBase::PopupItem ( INT  iItem,
BOOL  keyInitiated 
)

Definition at line 1099 of file CMenuToolbars.cpp.

1100 {
1101  INT index;
1102  DWORD_PTR dwData;
1103 
1104  if (iItem < 0)
1105  return S_OK;
1106 
1107  if (m_popupBar == this && m_popupItem == iItem)
1108  return S_OK;
1109 
1110  GetDataFromId(iItem, &index, &dwData);
1111 
1113  if (hr != S_OK)
1114  return hr;
1115 
1116  if (m_popupBar)
1117  {
1119  if (FAILED_UNEXPECTEDLY(hr))
1120  return hr;
1121  }
1122 
1123  if (!(m_initFlags & SMINIT_VERTICAL))
1124  {
1125  TRACE("PopupItem non-vertical %d %d\n", index, iItem);
1126  m_menuBand->_ChangeHotItem(this, iItem, 0);
1127  }
1128 
1129  return InternalPopupItem(iItem, index, dwData, keyInitiated);
1130 }
virtual HRESULT InternalPopupItem(INT iItem, INT index, DWORD_PTR dwData, BOOL keyInitiated)=0
virtual HRESULT InternalHasSubMenu(INT iItem, INT index, DWORD_PTR dwData)=0
HRESULT hr
Definition: shlfolder.c:183
HRESULT GetDataFromId(INT iItem, INT *pIndex, DWORD_PTR *pData)
static HANDLE ULONG_PTR dwData
Definition: file.c:35
int32_t INT
Definition: typedefs.h:58
HRESULT _ChangeHotItem(CMenuToolbarBase *tb, INT id, DWORD dwFlags)
Definition: CMenuBand.cpp:880
GLuint index
Definition: glext.h:6031
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:71
#define index(s, c)
Definition: various.h:29
CMenuToolbarBase * m_popupBar
Definition: CMenuToolbars.h:47
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define S_OK
Definition: intsafe.h:51
HRESULT CancelCurrentPopup()
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39

Referenced by CMenuBand::_MenuItemSelect(), ChangeHotItem(), OnPopupTimer(), and ProcessClick().

◆ PopupSubMenu() [1/2]

HRESULT CMenuToolbarBase::PopupSubMenu ( UINT  itemId,
UINT  index,
IShellMenu childShellMenu,
BOOL  keyInitiated 
)

Definition at line 705 of file CMenuToolbars.cpp.

706 {
707  // Calculate the submenu position and exclude area
708  RECT rc = { 0 };
709 
710  if (!GetItemRect(index, &rc))
711  return E_FAIL;
712 
713  POINT a = { rc.left, rc.top };
714  POINT b = { rc.right, rc.bottom };
715 
716  ClientToScreen(&a);
717  ClientToScreen(&b);
718 
719  POINTL pt = { a.x, b.y };
720  RECTL rcl = { a.x, a.y, b.x, b.y };
721 
722  if (m_initFlags & SMINIT_VERTICAL)
723  {
724  // FIXME: Hardcoding this here feels hacky.
725  if (IsAppThemed())
726  {
727  pt.x = b.x - 1;
728  pt.y = a.y - 1;
729  }
730  else
731  {
732  pt.x = b.x - 3;
733  pt.y = a.y - 3;
734  }
735  }
736 
737  // Display the submenu
739 
740  m_menuBand->_ChangePopupItem(this, iItem);
741  m_menuBand->_OnPopupSubMenu(childShellMenu, &pt, &rcl, keyInitiated);
742 
743  return S_OK;
744 }
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define TRUE
Definition: types.h:120
#define pt(x, y)
Definition: drawing.c:79
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
#define E_FAIL
Definition: ddrawi.h:102
BOOL WINAPI IsAppThemed(void)
Definition: system.c:596
GLuint index
Definition: glext.h:6031
HRESULT _OnPopupSubMenu(IShellMenu *childShellMenu, POINTL *pAt, RECTL *pExclude, BOOL mouseInitiated)
Definition: CMenuBand.cpp:1055
HRESULT _ChangePopupItem(CMenuToolbarBase *tb, INT id)
Definition: CMenuBand.cpp:899
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define S_OK
Definition: intsafe.h:51
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39
LONG bottom
Definition: windef.h:309
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204

Referenced by CMenuStaticToolbar::InternalPopupItem(), and CMenuSFToolbar::InternalPopupItem().

◆ PopupSubMenu() [2/2]

HRESULT CMenuToolbarBase::PopupSubMenu ( UINT  itemId,
UINT  index,
HMENU  menu 
)

Definition at line 746 of file CMenuToolbars.cpp.

747 {
748  // Calculate the submenu position and exclude area
749  RECT rc = { 0 };
750 
751  if (!GetItemRect(index, &rc))
752  return E_FAIL;
753 
754  POINT a = { rc.left, rc.top };
755  POINT b = { rc.right, rc.bottom };
756 
757  ClientToScreen(&a);
758  ClientToScreen(&b);
759 
760  POINT pt = { a.x, b.y };
761  RECT rcl = { a.x, a.y, b.x, b.y };
762 
763  if (m_initFlags & SMINIT_VERTICAL)
764  {
765  pt.x = b.x;
766  pt.y = a.y;
767  }
768 
769  HMENU popup = GetSubMenu(menu, index);
770 
771  // Display the submenu
773  m_menuBand->_ChangePopupItem(this, iItem);
774  m_menuBand->_TrackSubMenu(popup, pt.x, pt.y, rcl);
777 
778  return S_OK;
779 }
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define TRUE
Definition: types.h:120
#define pt(x, y)
Definition: drawing.c:79
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
LONG right
Definition: windef.h:308
#define E_FAIL
Definition: ddrawi.h:102
#define FALSE
Definition: types.h:117
GLuint index
Definition: glext.h:6031
HRESULT _ChangePopupItem(CMenuToolbarBase *tb, INT id)
Definition: CMenuBand.cpp:899
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define S_OK
Definition: intsafe.h:51
HRESULT _TrackSubMenu(HMENU popup, INT x, INT y, RECT &rcExclude)
Definition: CMenuBand.cpp:800
#define NULL
Definition: types.h:112
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39
LONG bottom
Definition: windef.h:309
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60

◆ PrepareExecuteItem()

HRESULT CMenuToolbarBase::PrepareExecuteItem ( INT  iItem)

Definition at line 872 of file CMenuToolbars.cpp.

873 {
874  this->m_menuBand->_KillPopupTimers();
875 
876  m_executeItem = iItem;
877  return GetDataFromId(iItem, &m_executeIndex, &m_executeData);
878 }
HRESULT GetDataFromId(INT iItem, INT *pIndex, DWORD_PTR *pData)
HRESULT _KillPopupTimers()
Definition: CMenuBand.cpp:1119
DWORD_PTR m_executeData
Definition: CMenuToolbars.h:55
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39

◆ ProcessClick()

HRESULT CMenuToolbarBase::ProcessClick ( INT  iItem)

Definition at line 799 of file CMenuToolbars.cpp.

800 {
802  {
803  TRACE("Item click prevented by DisableMouseTrack\n");
804  return S_OK;
805  }
806 
807  // If a button is clicked while a submenu was open, cancel the submenu.
808  if (!(m_initFlags & SMINIT_VERTICAL) && m_isTrackingPopup)
809  {
810  TRACE("OnCommand cancelled because it was tracking submenu.\n");
811  return S_FALSE;
812  }
813 
814  if (PopupItem(iItem, FALSE) == S_OK)
815  {
816  TRACE("PopupItem returned S_OK\n");
817  return S_FALSE;
818  }
819 
820  TRACE("Executing...\n");
821 
822  return m_menuBand->_MenuItemSelect(MPOS_EXECUTE);
823 }
#define FALSE
Definition: types.h:117
#define S_FALSE
Definition: winerror.h:2357
HRESULT PopupItem(INT iItem, BOOL keyInitiated)
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39
HRESULT _MenuItemSelect(DWORD changeType)
Definition: CMenuBand.cpp:954

Referenced by MenuBarMouseDown(), MenuBarMouseUp(), and OnWinEvent().

◆ ProcessContextMenu()

HRESULT CMenuToolbarBase::ProcessContextMenu ( INT  iItem)

Definition at line 825 of file CMenuToolbars.cpp.

826 {
827  INT index;
828  DWORD_PTR data;
829 
830  GetDataFromId(iItem, &index, &data);
831 
832  DWORD pos = GetMessagePos();
834 
835  return InternalContextMenu(iItem, index, data, pt);
836 }
#define pt(x, y)
Definition: drawing.c:79
HRESULT GetDataFromId(INT iItem, INT *pIndex, DWORD_PTR *pData)
#define GET_X_LPARAM(lp)
Definition: windowsx.h:274
DWORD WINAPI GetMessagePos(void)
Definition: message.c:1351
int32_t INT
Definition: typedefs.h:58
GLuint index
Definition: glext.h:6031
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define index(s, c)
Definition: various.h:29
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:275
virtual HRESULT InternalContextMenu(INT iItem, INT index, DWORD_PTR dwData, POINT pt)=0

Referenced by MenuBarMouseUp().

◆ SetPosSize()

HRESULT CMenuToolbarBase::SetPosSize ( int  x,
int  y,
int  cx,
int  cy 
)

Definition at line 475 of file CMenuToolbars.cpp.

476 {
477  // Update the toolbar or pager to fit the requested rect
478  // If we have a pager, set the toolbar height to the ideal height of the toolbar
479  if (m_pager.m_hWnd)
480  {
481  SetWindowPos(NULL, x, y, cx, m_idealSize.cy, 0);
482  m_pager.SetWindowPos(NULL, x, y, cx, cy, 0);
483  }
484  else
485  {
486  SetWindowPos(NULL, x, y, cx, cy, 0);
487  }
488 
489  // In a vertical menu, resize the buttons to fit the width
490  if (m_initFlags & SMINIT_VERTICAL)
491  {
492  DWORD btnSize = GetButtonSize();
493  SetButtonSize(cx, GET_Y_LPARAM(btnSize));
494  }
495 
496  return S_OK;
497 }
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:585
CContainedWindow m_pager
Definition: CMenuToolbars.h:31
unsigned long DWORD
Definition: ntddk_ex.h:95
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:275
_Out_opt_ int * cx
Definition: commctrl.h:585
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
LONG cy
Definition: windef.h:335

Referenced by CMenuBand::OnPosRectChangeDB().

◆ ShowDW()

HRESULT CMenuToolbarBase::ShowDW ( BOOL  fShow)

Definition at line 309 of file CMenuToolbars.cpp.

310 {
311  ShowWindow(fShow ? SW_SHOW : SW_HIDE);
312 
313  // Ensure that the right image list is assigned to the toolbar
315 
316  // For custom-drawing
317  SystemParametersInfo(SPI_GETFLATMENU, 0, &m_useFlatMenus, 0);
318 
319  return S_OK;
320 }
#define SW_HIDE
Definition: winuser.h:762
#define SystemParametersInfo
Definition: winuser.h:5833
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
HRESULT UpdateImageLists()
#define SW_SHOW
Definition: winuser.h:769
#define S_OK
Definition: intsafe.h:51

Referenced by CMenuBand::ShowDW().

◆ TrackContextMenu()

HRESULT CMenuToolbarBase::TrackContextMenu ( IContextMenu contextMenu,
POINT  pt 
)

Definition at line 781 of file CMenuToolbars.cpp.

782 {
783  // Cancel submenus
785  if (m_popupBar)
787 
788  // Display the context menu
789  return m_menuBand->_TrackContextMenu(contextMenu, pt.x, pt.y);
790 }
#define pt(x, y)
Definition: drawing.c:79
HRESULT _CancelCurrentPopup()
Definition: CMenuBand.cpp:1038
HRESULT _KillPopupTimers()
Definition: CMenuBand.cpp:1119
HRESULT _TrackContextMenu(IContextMenu *popup, INT x, INT y)
Definition: CMenuBand.cpp:821
CMenuToolbarBase * m_popupBar
Definition: CMenuToolbars.h:47
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39

Referenced by CMenuStaticToolbar::InternalContextMenu(), and CMenuSFToolbar::InternalContextMenu().

◆ UpdateImageLists()

HRESULT CMenuToolbarBase::UpdateImageLists ( )
private

Definition at line 322 of file CMenuToolbars.cpp.

323 {
324  if ((m_initFlags & (SMINIT_TOPLEVEL | SMINIT_VERTICAL)) == SMINIT_TOPLEVEL) // not vertical.
325  {
326  // No image list, prevents the buttons from having a margin at the left side
328  return S_OK;
329  }
330 
331  // Assign the correct imagelist and padding based on the current icon size
332 
333  int shiml;
334  if (m_menuBand->UseBigIcons())
335  {
336  shiml = SHIL_LARGE;
337  SetPadding(4, 0);
338  }
339  else
340  {
341  shiml = SHIL_SMALL;
342  SetPadding(4, 4);
343  }
344 
345  IImageList * piml;
346  HRESULT hr = SHGetImageList(shiml, IID_PPV_ARG(IImageList, &piml));
347  if (FAILED_UNEXPECTEDLY(hr))
348  {
350  }
351  else
352  {
353  SetImageList((HIMAGELIST)piml);
354  }
355  return S_OK;
356 }
#define SHIL_LARGE
Definition: shellapi.h:182
HRESULT hr
Definition: shlfolder.c:183
#define IID_PPV_ARG(Itype, ppType)
HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv)
Definition: shellord.c:2420
BOOL UseBigIcons()
Definition: CMenuBand.h:207
LONG HRESULT
Definition: typedefs.h:79
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:71
static VOID SetImageList(HWND hwnd)
Definition: mplay32.c:238
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
CMenuBand * m_menuBand
Definition: CMenuToolbars.h:39
#define SHIL_SMALL
Definition: shellapi.h:183

Referenced by CreateToolbar(), and ShowDW().

Member Data Documentation

◆ m_cancelingPopup

BOOL CMenuToolbarBase::m_cancelingPopup
protected

Definition at line 57 of file CMenuToolbars.h.

Referenced by BeforeCancelPopup(), MenuBarMouseDown(), and MenuBarMouseUp().

◆ m_disableMouseTrack

BOOL CMenuToolbarBase::m_disableMouseTrack
private

Definition at line 35 of file CMenuToolbars.h.

Referenced by ChangeHotItem(), DisableMouseTrack(), and ProcessClick().

◆ m_dwMenuFlags

DWORD CMenuToolbarBase::m_dwMenuFlags
protected

◆ m_executeData

DWORD_PTR CMenuToolbarBase::m_executeData
protected

Definition at line 55 of file CMenuToolbars.h.

Referenced by ExecuteItem(), and PrepareExecuteItem().

◆ m_executeIndex

INT CMenuToolbarBase::m_executeIndex
protected

Definition at line 53 of file CMenuToolbars.h.

Referenced by PrepareExecuteItem().

◆ m_executeItem

INT CMenuToolbarBase::m_executeItem
protected

Definition at line 54 of file CMenuToolbars.h.

Referenced by ExecuteItem(), and PrepareExecuteItem().

◆ m_hasSizes

BOOL CMenuToolbarBase::m_hasSizes
protected

Definition at line 41 of file CMenuToolbars.h.

Referenced by AddButton(), AddPlaceholder(), AddSeparator(), ClearToolbar(), and GetSizes().

◆ m_hotBar

CMenuToolbarBase* CMenuToolbarBase::m_hotBar
protected

Definition at line 45 of file CMenuToolbars.h.

Referenced by ChangeHotItem(), IsTrackedItem(), and OnCustomDraw().

◆ m_hotItem

INT CMenuToolbarBase::m_hotItem
protected

◆ m_idealSize

SIZE CMenuToolbarBase::m_idealSize
protected

Definition at line 42 of file CMenuToolbars.h.

Referenced by CMenuToolbarBase(), GetSizes(), and SetPosSize().

◆ m_initFlags

◆ m_isTrackingPopup

BOOL CMenuToolbarBase::m_isTrackingPopup
protected

◆ m_itemSize

SIZE CMenuToolbarBase::m_itemSize
protected

Definition at line 43 of file CMenuToolbars.h.

Referenced by CMenuToolbarBase(), and GetSizes().

◆ m_marlett

HFONT CMenuToolbarBase::m_marlett
private

Definition at line 33 of file CMenuToolbars.h.

Referenced by CMenuToolbarBase(), OnCustomDraw(), and ~CMenuToolbarBase().

◆ m_menuBand

◆ m_pager

CContainedWindow CMenuToolbarBase::m_pager
private

◆ m_popupBar

CMenuToolbarBase* CMenuToolbarBase::m_popupBar
protected

◆ m_popupItem

INT CMenuToolbarBase::m_popupItem
protected

Definition at line 48 of file CMenuToolbars.h.

Referenced by ChangePopupItem(), IsTrackedItem(), OnCustomDraw(), and PopupItem().

◆ m_timerEnabled

BOOL CMenuToolbarBase::m_timerEnabled
private

Definition at line 36 of file CMenuToolbars.h.

Referenced by ChangeHotItem(), KillPopupTimer(), and OnPopupTimer().

◆ m_useFlatMenus

BOOL CMenuToolbarBase::m_useFlatMenus
private

Definition at line 34 of file CMenuToolbars.h.

Referenced by CreateToolbar(), OnCustomDraw(), OnWinEvent(), and ShowDW().

◆ m_usePager

BOOL CMenuToolbarBase::m_usePager
protected

Definition at line 44 of file CMenuToolbars.h.

Referenced by CreateToolbar().


The documentation for this class was generated from the following files: