ExtToolControlBar.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:54k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #if (!defined __EXT_TOOLCONTROLBAR_H)
  22. #define __EXT_TOOLCONTROLBAR_H
  23. #if (!defined __EXT_MFC_DEF_H)
  24. #include <ExtMfcDef.h>
  25. #endif // __EXT_MFC_DEF_H
  26. #if (!defined __EXT_CONTROLBAR_H)
  27. #include <ExtControlBar.h>
  28. #endif
  29. #if (!defined __EXT_CMD_ICON_H)
  30. #include <ExtCmdIcon.h>
  31. #endif // __EXT_CMD_ICON_H
  32. #if _MSC_VER >= 1000
  33. #pragma once
  34. #endif // _MSC_VER >= 1000
  35. class CExtBarButton;
  36. class CExtToolControlBar;
  37. class CExtMenuControlBar;
  38. class CExtCmdItem;
  39. class CExtPopupInplaceListBox;
  40. #ifndef __EXT_MFC_NO_UNDO_REDO_POPUP
  41. class CExtPopupUndoRedoMenuWnd;
  42. #endif // __EXT_MFC_NO_UNDO_REDO_POPUP
  43. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  44. class CExtCustomizeCmdKeyTip;
  45. class CExtPopupKeyTipWnd;
  46. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  47. /////////////////////////////////////////////////////////////////////////////
  48. #define __EXT_MFC_IMPLEMENT_TT_REDIR_OnToolHitTest_EX( __FROM__, __TO__, __TT_MEMBER__, __POINT_PARM__, __TOOLINFO_PTR__, __DEPTH__ ) 
  49. if( __TOOLINFO_PTR__ != NULL && GetSafeHwnd() != NULL ) 
  50. HWND __local_hWndParent__ = ::GetParent( m_hWnd ); 
  51. int __local_nParentDepth__ = 1; 
  52. for( ; 
  53. ( __local_hWndParent__ != NULL ) 
  54. && ( __local_nParentDepth__ < __DEPTH__ ); 
  55. __local_nParentDepth__ ++ 
  56. __local_hWndParent__ = ::GetParent( __local_hWndParent__ ); 
  57. if( __local_hWndParent__ != NULL ) 
  58. CWnd * __local_pWndPermanent__ = 
  59. CWnd::FromHandlePermanent( 
  60. __local_hWndParent__ 
  61. ); 
  62. if( __local_pWndPermanent__ != NULL ) 
  63. __TO__ * __local_pTypedParentWnd__ = 
  64. DYNAMIC_DOWNCAST( 
  65. __TO__, 
  66. __local_pWndPermanent__ 
  67. ); 
  68. if( __local_pTypedParentWnd__ != NULL ) 
  69. CPoint __local_pointForTypedParentWnd__ = __POINT_PARM__ ; 
  70. ClientToScreen( 
  71. & __local_pointForTypedParentWnd__ 
  72. ); 
  73. __local_pTypedParentWnd__ -> ScreenToClient( 
  74. & __local_pointForTypedParentWnd__ 
  75. ); 
  76. CRect __local_rcSaved__ = 
  77. __TOOLINFO_PTR__ -> rect; 
  78. ClientToScreen( 
  79. &( __TOOLINFO_PTR__ -> rect ) 
  80. ); 
  81. __local_pTypedParentWnd__ -> 
  82. ScreenToClient( 
  83. &( __TOOLINFO_PTR__ -> rect ) 
  84. ); 
  85. __TOOLINFO_PTR__->hwnd = 
  86. __local_pTypedParentWnd__ -> m_hWnd; 
  87. struct __local_friendy_typed_parent__ 
  88. : public __TO__ 
  89. friend class __FROM__ ; 
  90. }; 
  91. __EXT_MFC_INT_PTR __local_nRetVal__ = 
  92. ( ( __local_friendy_typed_parent__* ) 
  93. __local_pTypedParentWnd__ 
  94. ) -> 
  95. OnToolHitTest( 
  96. __local_pointForTypedParentWnd__, 
  97. __TOOLINFO_PTR__ 
  98. ); 
  99. ::CopyRect( 
  100. &( __TOOLINFO_PTR__ -> rect ), 
  101. & __local_rcSaved__ 
  102. ); 
  103. __TOOLINFO_PTR__ -> hwnd = m_hWnd; 
  104. if( ( __TOOLINFO_PTR__ -> lpszText ) != NULL 
  105. && ( __TOOLINFO_PTR__ -> lpszText ) != LPSTR_TEXTCALLBACK 
  106. if( __local_nRetVal__ != -1 
  107. && (   __TT_MEMBER__ .GetSafeHwnd() == NULL 
  108. || ( __TT_MEMBER__ .GetStyle() & WS_VISIBLE ) == 0 
  109. __FROM__ * pNonConstThis = 
  110. const_cast < __FROM__ * > ( this ); 
  111. pNonConstThis -> SetTooltipText( 
  112. __EXT_MFC_SAFE_LPCTSTR( 
  113. LPCTSTR( __TOOLINFO_PTR__ -> lpszText ) 
  114. ); 
  115. pNonConstThis -> ActivateTooltip(); 
  116. ::free( __TOOLINFO_PTR__ -> lpszText ); 
  117. __TOOLINFO_PTR__ -> lpszText = NULL; 
  118. return -1; 
  119. }
  120. #define __EXT_MFC_IMPLEMENT_TT_REDIR_OnToolHitTest( __FROM__, __TO__ ) 
  121. __EXT_MFC_IMPLEMENT_TT_REDIR_OnToolHitTest_EX( __FROM__, __TO__, m_wndToolTip, point, pTI, 1 )
  122. /////////////////////////////////////////////////////////////////////////////
  123. // CExtBarButton
  124. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  125. // ribbon bar's visual informativeness level (simple case like buttons)
  126. #define __EXT_RIBBON_ILV_SIMPLE_SMALL 0
  127. #define __EXT_RIBBON_ILV_SIMPLE_NORMAL 1
  128. #define __EXT_RIBBON_ILV_SIMPLE_LARGE 2
  129. #define __EXT_RIBBON_ILV_SIMPLE_MIN 0
  130. #define __EXT_RIBBON_ILV_SIMPLE_MAX 2
  131. // ribbon bar's effective informativeness level
  132. #define __EXT_RIBBON_ILE_MIN 0
  133. #define __EXT_RIBBON_ILE_MAX 10
  134. #define __EXT_RIBBON_BIT_COUNT_ILE 5
  135. #define __EXT_RIBBON_BIT_COUNT_ILV (32-__EXT_RIBBON_BIT_COUNT_ILE-1)
  136. #define __EXT_RIBBON_BIT_MASK_ILE ((1<<__EXT_RIBBON_BIT_COUNT_ILE)-1)
  137. #define __EXT_RIBBON_BIT_MASK_ILV ((1<<__EXT_RIBBON_BIT_COUNT_ILV)-1)
  138. #define __EXT_RIBBON_MAKE_RULE_ARRAY_ENTRY( __ILE__, __ILV__, __TOOL_WRAP__ ) 
  139. DWORD( 
  140. ( DWORD(__ILE__) & __EXT_RIBBON_BIT_MASK_ILE ) 
  141. | ( ( DWORD(__ILV__) & __EXT_RIBBON_BIT_MASK_ILV ) << __EXT_RIBBON_BIT_COUNT_ILE ) 
  142. | ( DWORD( (__TOOL_WRAP__) ? 1 : 0 ) << 15 ) 
  143. )
  144. #define __EXT_RIBBON_ILE_FROM_ENTRY( __ENTRY__ ) 
  145. DWORD( DWORD(__ENTRY__) & __EXT_RIBBON_BIT_MASK_ILE )
  146. #define __EXT_RIBBON_ILV_FROM_ENTRY( __ENTRY__ ) 
  147. DWORD( (DWORD(__ENTRY__) >> __EXT_RIBBON_BIT_COUNT_ILE ) & __EXT_RIBBON_BIT_MASK_ILV )
  148. #define __EXT_RIBBON_TOOL_WRAP_FROM_ENTRY( __ENTRY__ ) 
  149. ( ( ( (DWORD(__ENTRY__) >> 15 ) & 0x01 ) != 0 ) ? true : false )
  150. class CExtRibbonNode;
  151. #endif // (!defined __EXT_MFC_NO_RIBBON_BAR)
  152. class __PROF_UIS_API CExtBarButton
  153. : public CObject
  154. , public CExtAnimationClient
  155. {
  156. public:
  157. DECLARE_DYNCREATE( CExtBarButton );
  158. protected:
  159. CExtToolControlBar * m_pBar;
  160. CExtBarButton * m_pParentButton;
  161. CArray < CExtBarButton *, CExtBarButton * > m_arrChildren;
  162. UINT m_nButtonCmdID; // Command ID or ID_SEPARATOR
  163. UINT m_nEffectiveCmdID;
  164. UINT m_nStyle; // button styles
  165. CSize m_ActiveSize;
  166. CRect m_ActiveRect;
  167. bool m_bWrapH:1, m_bWrapV:1, m_bWrapF:1,
  168. m_bVisible:1,
  169. m_bHover:1,
  170. m_bCtrlAutoDestroyed:1,
  171. m_bVertDocked:1,
  172. m_bPopupMenu:1,
  173. m_bAutoDestroyMenu:1,
  174. m_bAppendMdiWindowsMenu:1,
  175. m_bSeparatedDropDown:1,
  176. m_bAutoChangeID:1,
  177. m_bDropDownHT:1,
  178. m_bNoRotateVerticalLayout:1,
  179. m_bCtrlVisibleVert:1,
  180. m_bPressedTracking:1,
  181. m_bDrawBorder:1;
  182. INT m_nIconAlignment;
  183. INT m_nTextAlignment;
  184. CRect m_rcIconMargins;
  185. CRect m_rcTextMargins;
  186. INT m_nMaxButtonWidth;
  187. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  188. CExtCustomizeCmdTreeNode * m_pCmdNodeI, * m_pCmdNodeC;
  189. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  190. CWnd * m_pCtrl;
  191. HMENU m_hMenu;
  192. virtual bool _UpdateCtrlIsEnabled();
  193. virtual void _UpdateCtrl();
  194. void _UpdateCmdIdFromStyle()
  195. {
  196. if( m_nStyle & TBBS_SEPARATOR )
  197. {
  198. m_nStyle &= ~(TBBS_BUTTON);
  199. m_nButtonCmdID = m_nEffectiveCmdID = ID_SEPARATOR;
  200. }
  201. else
  202. {
  203. m_nStyle |= TBBS_BUTTON;
  204. }
  205. }
  206. void _DestroyMenu();
  207. public:
  208. CExtBarButton(
  209. CExtToolControlBar * pBar = NULL,
  210. UINT nCmdID = ID_SEPARATOR,
  211. UINT nStyle = 0
  212. );
  213. virtual ~CExtBarButton();
  214. CExtToolControlBar * GetSafeBar();
  215. const CExtToolControlBar * GetSafeBar() const;
  216. virtual CExtToolControlBar * GetBar();
  217. const CExtToolControlBar * GetBar() const;
  218. virtual void SetBar( CExtToolControlBar * pBar );
  219. virtual bool IsLargeIcon() const;
  220. virtual bool IsDisplayScreenTip() const;
  221. virtual bool IsDisplayShortcutKeysOnScreenTip() const;
  222. virtual UINT GetCmdID(
  223. bool bEffective = true
  224. ) const;
  225. virtual void SetCmdID(
  226. UINT nCmdID,
  227. bool bEffectiveOnly = false,
  228. bool bEffectiveRecalcLayout = false
  229. );
  230. virtual bool GetSeparatedDropDown() const;
  231. virtual void SetSeparatedDropDown(
  232. bool bSeparatedDropDown = true
  233. );
  234. virtual bool GetAutoChangeID() const;
  235. virtual void SetAutoChangeID(
  236. bool bAutoChangeID = true
  237. );
  238. virtual bool GetNoRotateVerticalLayout() const;
  239. virtual void SetNoRotateVerticalLayout(
  240. bool bNoRotateVerticalLayout = true
  241. );
  242. virtual bool GetCtrlVisibleVertically() const;
  243. virtual void SetCtrlVisibleVertically( bool bVisible );
  244. virtual CWnd * CtrlGet();
  245. const CWnd * CtrlGet() const;
  246. virtual void CtrlSet(
  247. CWnd * pCtrl,
  248. bool bCtrlAutoDestroyed
  249. );
  250. virtual CWnd * CtrlDetach();
  251. void SetMaxButtonWidth( 
  252. INT nWidth 
  253. );
  254. INT GetMaxButtonWidth() const;
  255. void SetTextAlignment( 
  256. INT nAlignment 
  257. );
  258. INT GetTextAlignment() const;
  259. void SetIconAlignment( 
  260. INT nAlignment 
  261. );
  262. INT GetIconAlignment() const;
  263. void SetTextMargins(
  264. INT nLeft,
  265. INT nTop,
  266. INT nRight,
  267. INT nBottom
  268. );
  269. void SetTextMargins(
  270. const RECT & rcMargins
  271. );
  272. void SetTextMargins(
  273. LPCRECT lprcMargins
  274. );
  275. void SetIconMargins(
  276. INT nLeft,
  277. INT nTop,
  278. INT nRight,
  279. INT nBottom
  280. );
  281. void SetIconMargins(
  282. const RECT & rcMargins
  283. );
  284. void SetIconMargins(
  285. LPCRECT lprcMargins
  286. );
  287. void GetTextMargins(
  288. INT & nLeft,
  289. INT & nTop,
  290. INT & nRight,
  291. INT & nBottom
  292. ) const;
  293. CRect GetTextMargins() const;
  294. void GetIconMargins(
  295. INT & nLeft,
  296. INT & nTop,
  297. INT & nRight,
  298. INT & nBottom
  299. ) const;
  300. CRect GetIconMargins() const;
  301. bool GetDrawBorder() const;
  302. void SetDrawBorder( 
  303. bool bEnable = true 
  304. );
  305. virtual UINT GetStyle() const;
  306. virtual void SetStyle( UINT nStyle );
  307. virtual void ModifyStyle(
  308. UINT nAdd,
  309. UINT nRemove = 0
  310. );
  311. virtual void OnUpdateParentStyle();
  312. virtual bool OnInvalidateButton();
  313. virtual void OnPressedTrackingStart();
  314. virtual void OnPressedTrackingStop();
  315. virtual bool IsPressedTracking() const;
  316. virtual void SetVertDocked( bool bVertDocked );
  317. enum e_wrap_t
  318. {
  319. __EVT_HORZ = 0,
  320. __EVT_VERT = 1,
  321. __EVT_FLOAT = 2,
  322. __EVT_MIN_VALUE = 0,
  323. __EVT_MAX_VALUE = 2,
  324. };
  325. virtual bool IsWrap(
  326. CExtBarButton::e_wrap_t _evt
  327. ) const;
  328. virtual void SetWrap(
  329. CExtBarButton::e_wrap_t _evt,
  330. bool bWrap = true
  331. );
  332. virtual bool IsSeparator() const;
  333. virtual bool IsDisabled() const;
  334. virtual bool IsShowTipWhenDisabled() const;
  335. bool IsEnabled() const;
  336. virtual bool IsIndeterminate() const;
  337. virtual bool IsPressed() const;
  338. virtual void Show(
  339. bool bShow = true
  340. );
  341. virtual bool IsVisible() const;
  342. virtual void SetHover(
  343. bool bHover = true
  344. );
  345. virtual bool IsHover() const;
  346. virtual CExtSafeString GetText() const;
  347. virtual void SetLayoutRect( CDC &dc, const RECT & rectButton );
  348. virtual void SetRect( const RECT & rectButton );
  349. virtual CRect Rect() const;
  350. virtual CRect RectDropDown() const;
  351. virtual CRect RectWithoutDropDown() const;
  352. operator CRect() const
  353. {
  354. return Rect();
  355. }
  356. virtual CSize Size() const
  357. {
  358. return m_ActiveSize;
  359. }
  360. virtual void Size( const SIZE & _size )
  361. {
  362. m_ActiveSize = _size;
  363. }
  364. operator CSize() const
  365. {
  366. return m_ActiveSize;
  367. }
  368. virtual void SetMenu(
  369. HMENU hMenu,
  370. bool bPopupMenu,
  371. bool bAutoDestroyMenu
  372. );
  373. virtual HMENU GetMenu()
  374. {
  375. return m_hMenu;
  376. }
  377. operator HMENU()
  378. {
  379. return GetMenu();
  380. }
  381. virtual void SetAppendMdiWindowsMenu(
  382. bool bAppendMdiWindowsMenu
  383. )
  384. {
  385. m_bAppendMdiWindowsMenu = bAppendMdiWindowsMenu;
  386. }
  387. virtual bool IsAppendMdiWindowsMenu()
  388. {
  389. return m_bAppendMdiWindowsMenu;
  390. }
  391. virtual bool CanBePressedInDisabledState();
  392. virtual bool IsPaintDropDown(
  393. bool bCustomizeMode = false
  394. ) const;
  395. virtual bool IsAbleToTrackMenu(
  396. bool bCustomizeMode = false
  397. ) const;
  398. virtual bool IsContainerOfPopupLikeMenu();
  399. virtual CSize CalculateLayout(
  400. CDC & dc,
  401. CSize sizePreCalc,
  402. BOOL bHorz
  403. );
  404. virtual BOOL PutToPopupMenu(
  405. CExtPopupMenuWnd * pPopup
  406. );
  407. virtual CExtCmdIcon * GetIconPtr();
  408. const CExtCmdIcon * GetIconPtr() const;
  409. CExtCmdIcon & GetIcon();
  410. const CExtCmdIcon & GetIcon() const;
  411. virtual CWnd * GetCmdTargetWnd();
  412. virtual const CExtAnimationParameters *
  413. AnimationClient_OnQueryAnimationParameters(
  414. INT eAPT // __EAPT_*** animation type
  415. ) const;
  416. virtual bool AnimationClient_CacheNextState(
  417. CDC & dc,
  418. const RECT & rcAcAnimationTarget,
  419. bool bAnimate,
  420. INT eAPT // __EAPT_*** animation type
  421. );
  422. virtual bool AnimationClient_StatePaint(
  423. CDC & dc
  424. );
  425. virtual void AnimationClient_StateDoStep();
  426. virtual bool IsHorzBarOrientation() const;
  427. virtual bool IsPaintAble( CDC & dc ) const;
  428. virtual void PaintParentChain(
  429. CDC & dc
  430. );
  431. virtual void PaintChildren(
  432. CDC & dc,
  433. bool bPaintOneNearestChildrenLevelOnly
  434. );
  435. virtual void Paint( // old version version (left for compatibility)
  436. CDC & dc,
  437. bool bHorz // unused, same as IsHorzBarOrientation()
  438. );
  439. virtual void Paint( // new simplified version (for simple toolbars)
  440. CDC & dc
  441. );
  442. virtual void PaintCompound( // new fully featured version (for compound toolbars and rendering animation parts)
  443. CDC & dc,
  444. bool bPaintParentChain,
  445. bool bPaintChildren,
  446. bool bPaintOneNearestChildrenLevelOnly
  447. );
  448. virtual COLORREF OnQueryCustomAccentEffectForIcon(
  449. CDC & dc
  450. );
  451. virtual bool OnQueryHoverBasedMenuTracking() const;
  452. virtual CExtPopupMenuWnd * OnCreatePopupMenuWnd();
  453. virtual UINT OnTrackPopup(
  454. CPoint point,
  455. bool bSelectAny,
  456. bool bForceNoAnimation
  457. );
  458. virtual void OnHover(
  459. CPoint point,
  460. bool bOn,
  461. bool & bSuspendTips
  462. );
  463. virtual void OnHovering(
  464. CPoint point,
  465. bool & bSuspendTips
  466. );
  467. static CExtBarButton * g_pTrackingMenuTBB;
  468. virtual void OnClick(
  469. CPoint point,
  470. bool bDown
  471. );
  472. virtual bool OnRClick(
  473. CPoint point,
  474. bool bDown
  475. );
  476. virtual bool OnDblClick(
  477. CPoint point
  478. );
  479. virtual void OnDeliverCmd();
  480. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  481. CPoint point,
  482. TOOLINFO * pTI
  483. );
  484. virtual LRESULT OnHelpHitTest(
  485. CPoint point
  486. );
  487. virtual void OnUpdateCmdUI(
  488. CWnd * pTarget,
  489. BOOL bDisableIfNoHndler,
  490. int nIndex
  491. );
  492. virtual bool CanStartCommandDrag();
  493. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  494. protected:
  495. virtual void _UpdateCmdNodeFromStyle();
  496. public:
  497. virtual bool IsCustomizeActiveItem();
  498. virtual void SetCustomizeActiveItem();
  499. virtual int CalculateDropOverEffect(
  500. CPoint point,
  501. CExtCustomizeSite::CCmdDragInfo & _dragInfo,
  502. bool bAllowTrackNodePopup = true
  503. );
  504. virtual CExtCustomizeCmdTreeNode * GetCmdNode(
  505. bool bInitial = false
  506. );
  507. const CExtCustomizeCmdTreeNode * GetCmdNode(
  508. bool bInitial = false
  509. ) const;
  510. virtual void OnCustomizeUpdateProps(
  511. CExtCustomizeCmdTreeNode * pNode = NULL // update from basic node
  512. );
  513. virtual void SetBasicCmdNode(
  514. CExtCustomizeCmdTreeNode * pNode
  515. );
  516. virtual void SetCustomizedCmdNode(
  517. CExtCustomizeCmdTreeNode * pNode
  518. );
  519. virtual CExtCustomizeCmdTreeNode * OnCustomizeNodeInit(
  520. CExtCustomizeSite * pSite,
  521. CExtCustomizeCmdTreeNode * pParentNode // toolbar node
  522. );
  523. #if (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  524. virtual int GetInitialResizingStateH( // -1 - left side resizing, 1 - right side resizing, 0 - no resizing at specified point (in bar's client coord)
  525. CPoint point,
  526. int * p_nWidthMin = NULL,
  527. int * p_nWidthMax = NULL
  528. );
  529. #endif // (!defined __EXT_MFC_NO_BUILTIN_TEXTFIELD)
  530. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  531. virtual void RedrawButton(
  532. bool bUpdateNow = false
  533. );
  534. virtual UINT OnGetTrackPopupFlags();
  535. virtual bool OnSetCursor( CPoint point );
  536. virtual bool IsChildButton(
  537. const CExtBarButton * pTestChildTBB,
  538. bool bTestOneLevelOnly = false
  539. ) const;
  540. virtual CExtBarButton * ParentButtonGet();
  541. const CExtBarButton * ParentButtonGet() const;
  542. virtual void ParentButtonSet(
  543. CExtBarButton * pParentButton = NULL
  544. );
  545. virtual INT ChildButtonGetCount() const;
  546. virtual CExtBarButton * ChildButtonGetAt( INT nPos );
  547. const CExtBarButton * ChildButtonGetAt( INT nPos ) const;
  548. virtual bool ChildButtonSetAt(
  549. INT nPos,
  550. CExtBarButton * pTBB
  551. );
  552. virtual void ChildButtonInsertAt(
  553. INT nPos,
  554. CExtBarButton * pTBB
  555. );
  556. void ChildButtonAdd(
  557. CExtBarButton * pTBB
  558. );
  559. bool ChildButtonRemove(
  560. CExtBarButton * pTBB,
  561. bool bDestroy = false
  562. );
  563. void ChildButtonRemoveAll(
  564. bool bDestroy = false
  565. );
  566. virtual INT ChildButtonRemoveAt(
  567. INT nPos,
  568. INT nCountToRemove = 1, // -1 remove up to end
  569. bool bDestroy = false
  570. );
  571. virtual INT ChildButtonGetIndexOf(
  572. const CExtBarButton * pTBB
  573. ) const;
  574. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  575. virtual bool IsRibbonPaintingMode() const;
  576. virtual bool IsNoRibbonLayout() const;
  577. virtual CExtRibbonNode * Ribbon_GetNode(
  578. bool bInitial = false
  579. );
  580. const CExtRibbonNode * Ribbon_GetNode(
  581. bool bInitial = false
  582. ) const;
  583. virtual CSize RibbonILV_CalcSize(
  584. CDC & dc,
  585. INT nILV = -1 // -1 use current visual level
  586. ) const;
  587. bool RibbonWrapFromILE( INT nILE ) const;
  588. virtual INT RibbonILV_fromILE(
  589. INT nILE,
  590. bool * p_bIsWrap = NULL
  591. ) const;
  592. virtual INT RibbonILV_Get(
  593. INT nType = 0 // -1 min, 0 current, 1 - max
  594. ) const;
  595. virtual void RibbonILV_Set(
  596. INT nILV,
  597. INT nType = 0 // -1 min, 0 current, 1 - max
  598. );
  599. virtual INT RibbonILE_Get() const;
  600. virtual bool RibbonILE_Set( INT nILE ); // returns flag indicating whether ILV changed
  601. virtual INT RibbonILE_GetCollapsed() const;
  602. virtual bool RibbonILE_SetCollapsed( INT nILE ); // returns flag indicating whether collapsed state changed
  603. virtual CRect OnRibbonGetContentPadding() const;
  604. virtual void OnRibbonAlignContent( CDC & dc );
  605. virtual INT OnRibbonGetSeparatorExtent( bool bHorz );
  606. virtual void OnRibbonCalcMinMaxILE( INT & nMinILE, INT & nMaxILE );
  607. #endif // (!defined __EXT_MFC_NO_RIBBON_BAR)
  608. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  609. protected:
  610. CExtPopupKeyTipWnd * m_pWndKeyTip;
  611. public:
  612. virtual CExtCustomizeCmdKeyTip * OnKeyTipGetInfo();
  613. virtual CExtSafeString OnKeyTipGetText(
  614. INT nIndent
  615. );
  616. virtual CWnd * OnKeyTipGetParentWnd();
  617. virtual CPoint OnKeyTipGetGuideLines();
  618.   virtual CExtPopupKeyTipWnd * OnKeyTipGetWnd();
  619. virtual void OnKeyTipTrackingQuery(
  620. bool bShow,
  621. CExtCustomizeCmdKeyTip * pKeyTipChain,
  622. HDWP & hPassiveModeDWP
  623. );
  624. virtual void OnKeyTipTrackingQueryNested(
  625. bool bShow,
  626. CExtCustomizeCmdKeyTip * pKeyTipChain,
  627. bool bApplyToThisItem,
  628. HDWP & hPassiveModeDWP
  629. );
  630. virtual bool OnKeyTipTranslate(
  631. DWORD dwKeyCode,
  632. CExtCustomizeCmdKeyTip * pKeyTipChain,
  633. bool bAutoInvokeAction,
  634. bool & bActionInvoked,
  635. bool & bContinueKeyTipMode
  636. );
  637. virtual void OnKeyTipDisplay(
  638. CExtCustomizeCmdKeyTip & keyTipChain
  639. );
  640. virtual bool OnKeyTipInvokeAction(
  641. bool & bContinueKeyTipMode
  642. );
  643. #endif // from (!defined __EXT_MFC_NO_CUSTOMIZE)
  644. virtual void OnFlatTrackingStart(
  645. HDWP & hPassiveModeDWP
  646. );
  647. virtual void OnFlatTrackingStop();
  648. virtual bool OnQueryFlatTrackingEnabled() const;
  649. virtual CRect OnQueryFlatWalkingCalcRect() const;
  650. virtual CRect OnQueryBorderSizes(
  651. bool bHorz = true
  652. ) const;
  653. virtual INT OnQueryAlignmentText(
  654. bool bHorz = true
  655. ) const;
  656. virtual INT OnQueryAlignmentIcon(
  657. bool bHorz = true
  658. ) const;
  659. virtual CRect OnQueryMarginsText(
  660. bool bHorz = true
  661. ) const;
  662. virtual CRect OnQueryMarginsIcon(
  663. bool bHorz = true
  664. ) const;
  665. virtual INT OnQueryMaxButtonWidth(
  666. bool bHorz = true
  667. ) const;
  668. friend class CExtToolControlBar;
  669. }; // class CExtBarButton
  670. /////////////////////////////////////////////////////////////////////////////
  671. // CExtBarColorButton
  672. class __PROF_UIS_API CExtBarColorButton : public CExtBarButton
  673. {
  674. COLORREF m_clrDefault, m_clrSelected;
  675. LPARAM m_lParamCookie;
  676. bool m_bEnableBtnColorDefault:1, m_bEnableBtnColorCustom:1;
  677. CExtSafeString m_sBtnTextColorDefault, m_sBtnTextColorCustom;
  678. public:
  679. enum e_def_icon_type_t
  680. {
  681. __DIT_BOX = 0,
  682. __DIT_FRAME = 1,
  683. __DIT_CHAR = 2,
  684. __DIT_FILL_2007 = 3,
  685. __DIT_CHAR_2007 = 4,
  686. };
  687. private:
  688. e_def_icon_type_t m_eDIT;
  689. public:
  690. virtual void OnSyncIcon();
  691. virtual CSize CalculateLayout(
  692. CDC & dc,
  693. CSize sizePreCalc,
  694. BOOL bHorz
  695. );
  696. public:
  697. DECLARE_DYNCREATE( CExtBarColorButton );
  698. CExtBarColorButton(
  699. CExtToolControlBar * pBar = NULL,
  700. UINT nCmdID = ID_SEPARATOR,
  701. UINT nStyle = 0,
  702. COLORREF clrDefault = RGB(0,0,0),
  703. COLORREF clrSelected = RGB(0,0,0),
  704. LPARAM lParamCookie = 0L,
  705. bool bEnableBtnColorDefault = true,
  706. bool bEnableBtnColorCustom = true,
  707. __EXT_MFC_SAFE_LPCTSTR sBtnTextColorDefault = NULL,
  708. __EXT_MFC_SAFE_LPCTSTR sBtnTextColorCustom = NULL,
  709. e_def_icon_type_t eDIT = __DIT_BOX
  710. )
  711. : CExtBarButton( pBar, nCmdID, nStyle )
  712. , m_clrDefault( clrDefault )
  713. , m_clrSelected( clrSelected )
  714. , m_lParamCookie( lParamCookie )
  715. , m_bEnableBtnColorDefault( bEnableBtnColorDefault )
  716. , m_bEnableBtnColorCustom( bEnableBtnColorCustom )
  717. , m_sBtnTextColorDefault( (sBtnTextColorDefault==NULL) ? _T("") : sBtnTextColorDefault )
  718. , m_sBtnTextColorCustom( (sBtnTextColorCustom==NULL) ? _T("") : sBtnTextColorCustom )
  719. , m_eDIT( eDIT )
  720. {
  721. OnSyncIcon();
  722. }
  723. virtual COLORREF ColorGet( bool bSelected ) const;
  724. virtual void ColorSet( COLORREF clr, bool bSelected );
  725. virtual LPARAM LParamCookieGet() const;
  726. virtual void LParamCookieSet(
  727. LPARAM lParamCookie = 0L
  728. );
  729. virtual bool IsEnabledBtnColorDefault() const;
  730. virtual void EnableBtnColorDefault(
  731. bool bEnable = true
  732. );
  733. virtual bool IsEnabledBtnColorCustom() const;
  734. virtual void EnableBtnColorCustom(
  735. bool bEnable = true
  736. );
  737. virtual __EXT_MFC_SAFE_LPCTSTR BtnTextDefaultGet() const;
  738. virtual void BtnTextDefaultSet(
  739. __EXT_MFC_SAFE_LPCTSTR sText = NULL
  740. );
  741. virtual __EXT_MFC_SAFE_LPCTSTR BtnTextCustomGet() const;
  742. virtual void BtnTextCustomSet(
  743. __EXT_MFC_SAFE_LPCTSTR sText = NULL
  744. );
  745. e_def_icon_type_t IconTypeGet() const
  746. {
  747. ASSERT_VALID( this );
  748. return m_eDIT;
  749. }
  750. void IconTypeSet( e_def_icon_type_t eDIT = __DIT_BOX )
  751. {
  752. ASSERT_VALID( this );
  753. if( m_eDIT != eDIT )
  754. {
  755. m_eDIT = eDIT;
  756. OnSyncIcon();
  757. }
  758. }
  759. virtual void OnGenerateColorIcon(
  760. CExtCmdIcon & icon
  761. );
  762. virtual CExtCmdIcon * GetIconPtr();
  763. virtual BOOL PutToPopupMenu(
  764. CExtPopupMenuWnd * pPopup
  765. );
  766. bool CanBePressedInDisabledState();
  767. virtual bool IsAbleToTrackMenu(
  768. bool bCustomizeMode = false
  769. ) const;
  770. virtual UINT OnTrackPopup(
  771. CPoint point,
  772. bool bSelectAny,
  773. bool bForceNoAnimation
  774. );
  775. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  776. CPoint point,
  777. TOOLINFO * pTI
  778. );
  779. virtual LRESULT OnHelpHitTest(
  780. CPoint point
  781. );
  782. virtual void OnUpdateCmdUI(
  783. CWnd * pTarget,
  784. BOOL bDisableIfNoHndler,
  785. int nIndex
  786. );
  787. virtual bool CanStartCommandDrag();
  788. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  789. virtual int CalculateDropOverEffect(
  790. CPoint point,
  791. CExtCustomizeSite::CCmdDragInfo & _dragInfo,
  792. bool bAllowTrackNodePopup = true
  793. );
  794. virtual CExtCustomizeCmdTreeNode * GetCmdNode(
  795. bool bInitial = false
  796. );
  797. virtual void SetBasicCmdNode(
  798. CExtCustomizeCmdTreeNode * pNode
  799. );
  800. virtual void SetCustomizedCmdNode(
  801. CExtCustomizeCmdTreeNode * pNode
  802. );
  803. virtual CExtCustomizeCmdTreeNode * OnCustomizeNodeInit(
  804. CExtCustomizeSite * pSite,
  805. CExtCustomizeCmdTreeNode * pParentNode // toolbar node
  806. );
  807. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  808. virtual void OnDeliverCmd();
  809. }; // class CExtBarColorButton
  810. /////////////////////////////////////////////////////////////////////////////
  811. // CExtBarCheckBoxButton
  812. class __PROF_UIS_API CExtBarCheckBoxButton : public CExtBarButton
  813. {
  814. public:
  815. DECLARE_DYNCREATE( CExtBarCheckBoxButton );
  816. CExtBarCheckBoxButton(
  817. CExtToolControlBar * pBar = NULL,
  818. UINT nCmdID = ID_SEPARATOR,
  819. UINT nStyle = 0
  820. );
  821. virtual ~CExtBarCheckBoxButton();
  822. virtual CSize CalculateLayout(
  823. CDC & dc,
  824. CSize sizePreCalc,
  825. BOOL bHorz
  826. );
  827. virtual void PaintCompound(
  828. CDC & dc,
  829. bool bPaintParentChain,
  830. bool bPaintChildren,
  831. bool bPaintOneNearestChildrenLevelOnly
  832. );
  833. virtual CExtCmdIcon * GetIconPtr();
  834. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  835. virtual bool IsNoRibbonLayout() const;
  836. virtual INT RibbonILV_Get(
  837. INT nType = 0 // -1 min, 0 current, 1 - max
  838. ) const;
  839. virtual CSize RibbonILV_CalcSize(
  840. CDC & dc,
  841. INT nILV = -1 // -1 use current visual level
  842. ) const;
  843. #endif // (!defined __EXT_MFC_NO_RIBBON_BAR)
  844. protected:
  845. virtual INT _GetBoxState() const;
  846. virtual CSize _GetBoxSize(
  847. CDC & dc
  848. ) const;
  849. virtual void _PaintBox(
  850. CDC & dc,
  851. CRect & rcBox 
  852. ) const;
  853. }; // class CExtBarCheckBoxButton
  854. /////////////////////////////////////////////////////////////////////////////
  855. // CExtBarRadioBoxButton
  856. class __PROF_UIS_API CExtBarRadioBoxButton : public CExtBarCheckBoxButton
  857. {
  858. public:
  859. DECLARE_DYNCREATE( CExtBarRadioBoxButton );
  860. CExtBarRadioBoxButton(
  861. CExtToolControlBar * pBar = NULL,
  862. UINT nCmdID = ID_SEPARATOR,
  863. UINT nStyle = 0
  864. );
  865. virtual ~CExtBarRadioBoxButton();
  866. protected:
  867. virtual INT _GetBoxState() const;
  868. virtual CSize _GetBoxSize(
  869. CDC & dc
  870. ) const;
  871. virtual void _PaintBox(
  872. CDC & dc,
  873. CRect & rcBox 
  874. ) const;
  875. }; // class CExtBarRadioBoxButton
  876. /////////////////////////////////////////////////////////////////////////////
  877. // CExtBarLabelButton
  878. class __PROF_UIS_API CExtBarLabelButton : public CExtBarButton
  879. {
  880. public:
  881. DECLARE_DYNCREATE( CExtBarLabelButton );
  882. CExtBarLabelButton(
  883. CExtToolControlBar * pBar = NULL,
  884. UINT nCmdID = ID_SEPARATOR,
  885. UINT nStyle = 0
  886. );
  887. virtual ~CExtBarLabelButton();
  888. virtual CExtCmdIcon * GetIconPtr();
  889. virtual void OnUpdateCmdUI(
  890. CWnd * pTarget,
  891. BOOL bDisableIfNoHndler,
  892. int nIndex
  893. );
  894. virtual bool IsHover() const;
  895. virtual bool IsPressed() const;
  896. virtual bool IsPressedTracking() const;
  897. virtual void SetHover(
  898. bool bHover = true
  899. );
  900. virtual void OnHover(
  901. CPoint point,
  902. bool bOn,
  903. bool & bSuspendTips
  904. );
  905. virtual void OnClick(
  906. CPoint point,
  907. bool bDown
  908. );
  909. virtual bool AnimationClient_OnQueryEnabledState(
  910. INT eAPT // __EAPT_*** animation type
  911. ) const;
  912. virtual BOOL PutToPopupMenu(
  913. CExtPopupMenuWnd * pPopup
  914. );
  915. virtual bool OnQueryFlatTrackingEnabled() const;
  916. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  917. virtual bool IsNoRibbonLayout() const;
  918. virtual INT RibbonILV_Get(
  919. INT nType = 0 // -1 min, 0 current, 1 - max
  920. ) const;
  921. virtual CSize RibbonILV_CalcSize(
  922. CDC & dc,
  923. INT nILV = -1 // -1 use current visual level
  924. ) const;
  925. #endif // (!defined __EXT_MFC_NO_RIBBON_BAR)
  926. }; // class CExtBarLabelButton
  927. /////////////////////////////////////////////////////////////////////////////
  928. // CExtBarContentExpandButton
  929. typedef
  930. CArray < CExtBarButton *, CExtBarButton * >
  931. _tb_buttons_container_t;
  932. #define __ID_TOOLBAR_RIGHT_BUTTON__ ((UINT)-66)
  933. #define __RIGHT_BUTTON_HORZ_DX__ 11 // 14
  934. #define __RIGHT_BUTTON_VERT_DY__ 11 // 12
  935. class CExtPopupBaseWnd;
  936. class CExtPopupMenuWnd;
  937. class CExtPopupMenuSite;
  938. class CExtMiniDockFrameWnd;
  939. class __PROF_UIS_API CExtBarContentExpandButton : public CExtBarButton
  940. {
  941. public:
  942. DECLARE_DYNCREATE( CExtBarContentExpandButton );
  943. protected:
  944. bool m_bClearContent:1;
  945. _tb_buttons_container_t m_buttons;
  946. public:
  947. CExtBarContentExpandButton(
  948. CExtToolControlBar * pBar = NULL
  949. );
  950. virtual ~CExtBarContentExpandButton();
  951. bool IsContentClear()
  952. {
  953. ASSERT_VALID( this );
  954. return m_bClearContent;
  955. }
  956. void ClearContent( bool bClearContent = true )
  957. {
  958. if( this == NULL )
  959. return;
  960. ASSERT_VALID( this );
  961. m_bClearContent = bClearContent;
  962. }
  963. const _tb_buttons_container_t & GetButtons() const
  964. {
  965. return m_buttons;
  966. }
  967. _tb_buttons_container_t & GetButtons()
  968. {
  969. return m_buttons;
  970. }
  971. virtual CSize CalculateLayout(
  972. CDC & dc,
  973. CSize sizePreCalc,
  974. BOOL bHorz
  975. );
  976. virtual BOOL PutToPopupMenu(
  977. CExtPopupMenuWnd * pPopup
  978. );
  979. virtual void PaintCompound(
  980. CDC & dc,
  981. bool bPaintParentChain,
  982. bool bPaintChildren,
  983. bool bPaintOneNearestChildrenLevelOnly
  984. );
  985. virtual UINT OnGetTrackPopupFlags();
  986. virtual UINT OnTrackPopup(
  987. CPoint point,
  988. bool bSelectAny,
  989. bool bForceNoAnimation
  990. );
  991. virtual void OnHover(
  992. CPoint point,
  993. bool bOn,
  994. bool & bSuspendTips
  995. );
  996. virtual void OnClick(
  997. CPoint point,
  998. bool bDown
  999. );
  1000. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  1001. CPoint point,
  1002. TOOLINFO * pTI
  1003. );
  1004. virtual LRESULT OnHelpHitTest(
  1005. CPoint point
  1006. );
  1007. virtual bool CanStartCommandDrag();
  1008. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  1009. virtual CExtCustomizeCmdTreeNode * GetCmdNode(
  1010. bool bInitial = false
  1011. );
  1012. virtual void SetBasicCmdNode(
  1013. CExtCustomizeCmdTreeNode * pNode
  1014. );
  1015. virtual void SetCustomizedCmdNode(
  1016. CExtCustomizeCmdTreeNode * pNode
  1017. );
  1018. virtual CExtCustomizeCmdTreeNode * OnCustomizeNodeInit(
  1019. CExtCustomizeSite * pSite,
  1020. CExtCustomizeCmdTreeNode * pParentNode // toolbar node
  1021. );
  1022. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  1023. }; // class CExtBarContentExpandButton
  1024. /////////////////////////////////////////////////////////////////////////////
  1025. // CExtBarSliderButton
  1026. class __PROF_UIS_API CExtBarSliderButton : public CExtBarButton
  1027. {
  1028. public:
  1029. enum e_SliderArea_t
  1030. {
  1031. __ESA_ICON_AND_TEXT = 0, // both icon and text
  1032. __ESA_SLIDER = 1, // all slider
  1033. __ESA_SCROLLABLE = 2, // scrollable part of slider
  1034. __ESA_PAGE_UP = 3,
  1035. __ESA_PAGE_DOWN = 4,
  1036. __ESA_LINE_UP = 5,
  1037. __ESA_LINE_DOWN = 6,
  1038. __ESA_THUMB = 7,
  1039. __ESA_COUNT = 8,
  1040. __ESA_UNKNOWN_OR_NOWHERE = -1,
  1041. __ESA_PAINT_RANGE_FIRST = __ESA_SLIDER,
  1042. __ESA_PAINT_RANGE_LAST = __ESA_THUMB,
  1043. __ESA_CLICKABLE_RANGE_FIRST = __ESA_PAGE_UP,
  1044. __ESA_CLICKABLE_RANGE_LAST = __ESA_THUMB,
  1045. };
  1046. protected:
  1047. ULONG m_nScrollTotalRange, m_nScrollPos, m_nScrollPageSize;
  1048. INT m_nScrollButtonExtentH, m_nScrollButtonExtentV,
  1049. m_nScrollControlExtentH, m_nScrollControlExtentV;
  1050. CRect m_arrAreaRects[__ESA_COUNT];
  1051. e_SliderArea_t m_eAreaTracked, m_eAreaPressed;
  1052. public:
  1053. DECLARE_DYNCREATE( CExtBarSliderButton );
  1054. CExtBarSliderButton(
  1055. CExtToolControlBar * pBar = NULL,
  1056. UINT nCmdID = ID_SEPARATOR,
  1057. UINT nStyle = 0,
  1058. ULONG nScrollTotalRange = 0L,
  1059. ULONG nScrollPos = 0L,
  1060. ULONG nScrollPageSize = 0L,
  1061. INT nScrollButtonExtentH = 0,
  1062. INT nScrollButtonExtentV = 0,
  1063. INT nScrollControlExtentH = 50,
  1064. INT nScrollControlExtentV = 50
  1065. )
  1066. : CExtBarButton( pBar, nCmdID, nStyle )
  1067. , m_nScrollTotalRange( nScrollTotalRange )
  1068. , m_nScrollPos( nScrollPos )
  1069. , m_nScrollPageSize( nScrollPageSize )
  1070. , m_nScrollButtonExtentH( nScrollButtonExtentH )
  1071. , m_nScrollButtonExtentV( nScrollButtonExtentV )
  1072. , m_nScrollControlExtentH( nScrollControlExtentH )
  1073. , m_nScrollControlExtentV( nScrollControlExtentV )
  1074. , m_eAreaTracked( __ESA_UNKNOWN_OR_NOWHERE )
  1075. , m_eAreaPressed( __ESA_UNKNOWN_OR_NOWHERE )
  1076. {
  1077. for( int nRectNo = 0;
  1078. nRectNo < __ESA_COUNT;
  1079. nRectNo++
  1080. )
  1081. m_arrAreaRects[ nRectNo ].
  1082. SetRect( 0, 0, 0, 0 );
  1083. ASSERT( m_nScrollPos <= m_nScrollTotalRange );
  1084. ASSERT( m_nScrollButtonExtentH >= 0 );
  1085. ASSERT( m_nScrollButtonExtentV >= 0 );
  1086. ASSERT( m_nScrollControlExtentH >= 0 );
  1087. ASSERT( m_nScrollControlExtentV >= 0 );
  1088. }
  1089. ULONG ScrollLimitGet() const;
  1090. virtual ULONG ScrollTotalRangeGet() const;
  1091. virtual ULONG ScrollTotalRangeSet( ULONG nScrollTotalRange );
  1092. virtual ULONG ScrollPosGet() const;
  1093. virtual ULONG ScrollPosSet( ULONG nScrollPos );
  1094. virtual ULONG ScrollPageSizeGet() const;
  1095. virtual ULONG ScrollPageSizeSet( ULONG nScrollPageSize );
  1096. virtual INT ScrollButtonExtentHorzGet() const;
  1097. virtual INT ScrollButtonExtentHorzSet( INT nScrollButtonExtent );
  1098. virtual INT ScrollButtonExtentVertGet() const;
  1099. virtual INT ScrollButtonExtentVertSet( INT nScrollButtonExtent );
  1100. virtual INT ScrollControlExtentHorzGet() const;
  1101. virtual INT ScrollControlExtentHorzSet( INT nScrollControlExtent );
  1102. virtual INT ScrollControlExtentVertGet() const;
  1103. virtual INT ScrollControlExtentVertSet( INT nScrollControlExtent );
  1104. virtual void RecalcSliderLayout();
  1105. #ifdef _DEBUG
  1106. virtual void AssertValid() const;
  1107. virtual void Dump(CDumpContext& dc) const;
  1108. #endif
  1109. CExtBarSliderButton::e_SliderArea_t GetTrackedArea() const;
  1110. CExtBarSliderButton::e_SliderArea_t GetPressedArea() const;
  1111. CRect GetAreaRect( CExtBarSliderButton::e_SliderArea_t eSA ) const;
  1112. // slider button overrides
  1113. virtual void OnPaintScrollArea(
  1114. CDC & dc,
  1115. CExtBarSliderButton::e_SliderArea_t eSA,
  1116. bool bHorz
  1117. );
  1118. // CExtBarButton overrides
  1119. virtual bool GetSeparatedDropDown() const
  1120. {
  1121. ASSERT_VALID( this );
  1122. return false;
  1123. }
  1124. virtual void SetSeparatedDropDown( bool bSeparatedDropDown = true )
  1125. {
  1126. ASSERT_VALID( this );
  1127. ASSERT( FALSE );
  1128. bSeparatedDropDown;
  1129. return;
  1130. }
  1131. virtual bool GetAutoChangeID() const
  1132. {
  1133. ASSERT_VALID( this );
  1134. return false;
  1135. }
  1136. virtual void SetAutoChangeID( bool bAutoChangeID = true )
  1137. {
  1138. ASSERT_VALID( this );
  1139. ASSERT( FALSE );
  1140. bAutoChangeID;
  1141. return;
  1142. }
  1143. virtual void CtrlSet(
  1144. CWnd * pCtrl,
  1145. bool bCtrlAutoDestroyed
  1146. )
  1147. {
  1148. ASSERT_VALID( this );
  1149. ASSERT( FALSE );
  1150. pCtrl;
  1151. bCtrlAutoDestroyed;
  1152. return;
  1153. }
  1154. // virtual bool GetNoRotateVerticalLayout() const
  1155. // {
  1156. // return true;
  1157. // }
  1158. // virtual void SetNoRotateVerticalLayout( bool bNoRotateVerticalLayout = true )
  1159. // {
  1160. // ASSERT( FALSE );
  1161. // bNoRotateVerticalLayout;
  1162. // return;
  1163. // }
  1164. virtual void SetMenu(
  1165. HMENU hMenu,
  1166. bool bPopupMenu,
  1167. bool bAutoDestroyMenu
  1168. );
  1169. virtual HMENU GetMenu();
  1170. // virtual bool IsLargeIcon() const;
  1171. // virtual bool IsDisplayScreenTip() const;
  1172. // virtual bool IsDisplayShortcutKeysOnScreenTip() const;
  1173. virtual void SetRect( const RECT & rectButton );
  1174. bool CanBePressedInDisabledState();
  1175. virtual bool IsAbleToTrackMenu(
  1176. bool bCustomizeMode = false
  1177. ) const;
  1178. virtual bool IsContainerOfPopupLikeMenu();
  1179. // virtual CExtCmdIcon * GetIconPtr();
  1180. virtual CSize CalculateLayout(
  1181. CDC & dc,
  1182. CSize sizePreCalc,
  1183. BOOL bHorz
  1184. );
  1185. virtual void PaintCompound(
  1186. CDC & dc,
  1187. bool bPaintParentChain,
  1188. bool bPaintChildren,
  1189. bool bPaintOneNearestChildrenLevelOnly
  1190. );
  1191. virtual UINT OnTrackPopup(
  1192. CPoint point,
  1193. bool bSelectAny,
  1194. bool bForceNoAnimation
  1195. );
  1196. virtual void OnHover(
  1197. CPoint point,
  1198. bool bOn,
  1199. bool & bSuspendTips
  1200. );
  1201. virtual void OnClick(
  1202. CPoint point,
  1203. bool bDown
  1204. );
  1205. virtual void OnDeliverCmd();
  1206. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  1207. CPoint point,
  1208. TOOLINFO * pTI
  1209. );
  1210. virtual LRESULT OnHelpHitTest(
  1211. CPoint point
  1212. );
  1213. virtual void OnUpdateCmdUI(
  1214. CWnd * pTarget,
  1215. BOOL bDisableIfNoHndler,
  1216. int nIndex
  1217. );
  1218. virtual bool OnSetCursor( CPoint point );
  1219. }; // class CExtBarSliderButton
  1220. /////////////////////////////////////////////////////////////////////////////
  1221. // CExtToolControlBar
  1222. class __PROF_UIS_API CExtToolControlBar : public CExtControlBar
  1223. {
  1224. public:
  1225. DECLARE_DYNCREATE( CExtToolControlBar );
  1226. private:
  1227. friend class CExtBarButton;
  1228. friend class CExtBarContentExpandButton;
  1229. friend class CExtBarMdiDocButton;
  1230. class CExtToolControlBarCmdUI;
  1231. friend class CExtPopupBaseWnd;
  1232. friend class CExtPopupMenuWnd;
  1233. friend class CExtPopupMenuSite;
  1234. friend class CExtMiniDockFrameWnd;
  1235. public:
  1236. bool IsRightExpandButton( int nBtnIdx );
  1237. protected:
  1238. CExtBarContentExpandButton * m_pRightBtn;
  1239. _tb_buttons_container_t m_buttons;
  1240. virtual bool _AdjustBGInfo();
  1241. virtual void _RemoveAllButtonsImpl();
  1242. virtual int _GetButtonsCountImpl() const;
  1243. virtual void _SetCursor(
  1244. const CPoint & point
  1245. );
  1246. virtual void _RedrawOnPosChanged();
  1247. // Construction
  1248. public:
  1249. CExtToolControlBar();
  1250. virtual BOOL LoadToolBar(
  1251. __EXT_MFC_SAFE_LPCTSTR lpszResourceName,
  1252. COLORREF clrTransparent = RGB(192,192,192)
  1253. );
  1254. BOOL LoadToolBar(
  1255. UINT nIDResource,
  1256. COLORREF clrTransparent = RGB(192,192,192)
  1257. )
  1258. {
  1259. return
  1260. LoadToolBar(
  1261. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE(nIDResource) ),
  1262. clrTransparent
  1263. );
  1264. }
  1265. virtual BOOL InsertButton(
  1266. int nPos = -1, // append
  1267. UINT nCmdID = ID_SEPARATOR,
  1268. BOOL bDoRecalcLayout = TRUE
  1269. );
  1270. virtual BOOL InsertSpecButton(
  1271. int nPos, // -1 - append
  1272. CExtBarButton * pButton,
  1273. BOOL bDoRecalcLayout = TRUE
  1274. );
  1275. virtual BOOL RemoveButton(
  1276. int nPos,
  1277. BOOL bDoRecalcLayout = TRUE
  1278. );
  1279. virtual bool IsShowTipWhenDisabled( const CExtBarButton * pTBB ) const;
  1280. virtual BOOL SetButtons(
  1281. const UINT * lpIDArray = NULL,
  1282. int nIDCount = 0
  1283. ); // lpIDArray can be NULL to allocate empty buttons
  1284. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  1285. virtual BOOL SetButtons(
  1286. CExtCustomizeCmdTreeNode * pNode
  1287. );
  1288. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  1289. // Attributes
  1290. public:
  1291. static const UINT g_nMsgTrackButtonMenu;
  1292. static const UINT g_nMsgContinueTrackMenu;
  1293. bool m_bRightButtonDisplayBarsList:1;
  1294. bool m_bPaletteMode:1;
  1295. bool m_bForceBalloonGradientInDialogs:1;
  1296. bool m_bForceNoBalloonWhenRedockable:1;
  1297. int CommandToIndex( UINT nIDFind ) const;
  1298. UINT GetButtonID( int nIndex ) const;
  1299. virtual void GetButtonRect( int nIndex, LPRECT lpRect ) const;
  1300. UINT GetButtonStyle( int nIndex ) const;
  1301. void SetButtonStyle( int nIndex, UINT nStyle );
  1302. CExtBarButton::e_wrap_t GetBtnWrapCode() const;
  1303. protected:
  1304. virtual bool _IsShowContentWhenDragging() const;
  1305. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  1306. bool m_bKeyTipsDisplayed:1, m_bHelperKeyTipsSupported:1;
  1307. CExtCustomizeCmdKeyTip m_keyTipChain;
  1308. public:
  1309. virtual bool KeyTipsDisplayedGet() const;
  1310. virtual void KeyTipsDisplayedSet(
  1311. bool bKeyTipsDisplayed = true
  1312. );
  1313. virtual CExtCustomizeCmdKeyTip & KeyTipChainGet();
  1314. const CExtCustomizeCmdKeyTip & KeyTipChainGet() const;
  1315. virtual void KeyTipChainSet(
  1316. const CExtCustomizeCmdKeyTip & keyTipChain
  1317. );
  1318. void KeyTipChainEmpty();
  1319. virtual INT KeyTipTranslate(
  1320. DWORD dwKeyCode,
  1321. CExtCustomizeCmdKeyTip * pKeyTipChain,
  1322. bool bAutoInvokeAction,
  1323. bool & bActionInvoked,
  1324. bool & bContinueKeyTipMode
  1325. );
  1326. virtual void KeyTipDisplay(
  1327. CExtCustomizeCmdKeyTip & keyTipChain
  1328. );
  1329. #endif // from (!defined __EXT_MFC_NO_CUSTOMIZE)
  1330. public:
  1331. virtual void OnFlatTrackingStart(
  1332. HDWP & hPassiveModeDWP
  1333. );
  1334. virtual void OnFlatTrackingStop();
  1335. virtual bool IsLargeIcons() const;
  1336. virtual bool IsDisplayScreenTips() const;
  1337. virtual bool IsDisplayShortcutKeysOnScreenTips() const;
  1338. virtual LRESULT DoHelpHitTest( CPoint ptHelpHitTest );
  1339. virtual CExtBarButton * OnCreateBarCommandBtn(
  1340. UINT nCmdID,
  1341. UINT nStyle = 0
  1342. );
  1343. virtual CExtBarContentExpandButton * OnCreateBarRightBtn();
  1344. virtual COLORREF OnQueryCustomAccentEffectForIcon(
  1345. CDC & dc,
  1346. CExtBarButton * pTBB
  1347. );
  1348. BOOL InitContentExpandButton();
  1349. // for changing button info
  1350. void GetButtonInfo(
  1351. int nIndex,
  1352. UINT & nID,
  1353. UINT & nStyle
  1354. ) const;
  1355. void SetButtonInfo(
  1356. int nIndex,
  1357. UINT nID,
  1358. UINT nStyle
  1359. );
  1360. CExtBarButton * GetButton( int nIndex );
  1361. CExtBarContentExpandButton * GetRightButton();
  1362. CWnd * GetButtonCtrl(
  1363. int nIndex
  1364. );
  1365. bool SetButtonCtrl(
  1366. int nIndex,
  1367. CWnd * pCtrl = NULL,
  1368. bool bCtrlAutoDestroyed = TRUE
  1369. );
  1370. void SetButtonCtrlVisibleVertically(
  1371. int nIndex,
  1372. bool bVisible = true
  1373. );
  1374. bool GetButtonCtrlVisibleVertically(
  1375. int nIndex
  1376. ) const;
  1377. int GetButtonByAccessKey( __EXT_MFC_SAFE_TCHAR vkTCHAR );
  1378. HMENU GetButtonMenu(
  1379. int nIndex
  1380. );
  1381. bool SetButtonMenu(
  1382. int nIndex,
  1383. HMENU hMenu = NULL,
  1384. bool bPopupMenu = TRUE,
  1385. bool bAutoDestroyMenu = TRUE,
  1386. bool bDoRecalcLayout = TRUE
  1387. );
  1388. bool MarkButtonAsMdiWindowsMenu(
  1389. int nIndex,
  1390. bool bAppendMdiWindowsMenu = TRUE
  1391. );
  1392. virtual BOOL TrackButtonMenu(
  1393. int nIndex,
  1394. BOOL bSelectAny = FALSE,
  1395. BOOL bDelayedTracking = FALSE,
  1396. BOOL bNoAnimation = FALSE
  1397. );
  1398. int GetVisibleButton(
  1399. int nBtnIdx,
  1400. BOOL bNext,
  1401. BOOL bPassDisabled = TRUE
  1402. );
  1403. bool m_bLastDropDownHT:1;
  1404. bool m_bHelperFlatTrackingCalcEnabledLeftRight:1;
  1405. bool m_bHelperFlatTrackingCalcEnabledUpDown:1;
  1406. bool m_bHelperFlatTrackingCalcEnabledTab:1;
  1407. virtual INT OnCalcFlatTrackingIndex(
  1408. /*__EXT_MFC_SAFE_TCHAR*/ INT vkTCHAR,
  1409. INT nStartSearchIndex
  1410. );
  1411. virtual bool OnCalcFlatTrackingIndexCheckPass(
  1412. /*__EXT_MFC_SAFE_TCHAR*/ INT vkTCHAR,
  1413. INT nPassIndex,
  1414. const CExtBarButton * pPrevTBB,
  1415. const CExtBarButton * pNextTBB
  1416. ) const;
  1417. virtual bool OnCalcFlatTrackingTabOrder(
  1418. CTypedPtrArray < CPtrArray, CExtBarButton * > & arrTabOrder
  1419. );
  1420. virtual bool OnCalcFlatTrackingIndexCheckIntersectionEnabled(
  1421. CExtBarButton * pTBB,
  1422. /*__EXT_MFC_SAFE_TCHAR*/ INT vkTCHAR
  1423. );
  1424. int GetButtonsCount() const
  1425. {
  1426. return _GetButtonsCountImpl();
  1427. }
  1428. int GetMenuTrackingButton() const
  1429. {
  1430. return m_nBtnIdxMenuTracking;
  1431. }
  1432. // Implementation
  1433. public:
  1434. virtual ~CExtToolControlBar();
  1435. LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  1436. virtual CSize CalcFixedLayout(
  1437. BOOL bStretch,
  1438. BOOL bHorz
  1439. );
  1440.     virtual CSize CalcDynamicLayout(
  1441. int nLength,
  1442. DWORD dwMode
  1443. );
  1444. virtual void ToggleDocking();
  1445. #ifdef _DEBUG
  1446. virtual void AssertValid() const;
  1447. virtual void Dump(CDumpContext& dc) const;
  1448. #endif
  1449. protected:
  1450. virtual CExtBarButton * _GetButtonPtr( int nIndex ) const;
  1451. public:
  1452. virtual void _InvalidateButton( int nIndex );
  1453. virtual void _UpdateButton( int nIndex );
  1454. virtual void _CheckHitTestablePoint(
  1455. CPoint & point
  1456. );
  1457. protected:
  1458. CPoint m_ptLastClientHover;
  1459. public:
  1460. virtual bool _UpdateHoverButton(
  1461. CPoint point = CPoint(-1,-1), // default is use ::GetCursorPos()
  1462. bool bEnableUpdateWindow = true
  1463. );
  1464. protected:
  1465. virtual DWORD RecalcDelayShow(
  1466. AFX_SIZEPARENTPARAMS * lpLayout
  1467. );
  1468. public:
  1469. virtual bool OnQueryShiftRTL() const;
  1470. virtual bool OnQueryRevertRTL() const;
  1471. virtual void _RecalcPositionsImpl();
  1472. virtual void _RecalcLayoutImpl();
  1473. virtual void _RibbonPageRslaResetStateData();
  1474. public:
  1475. // rect should have client area size
  1476. virtual void _CalcInsideRect(
  1477. CRect & rect,
  1478. BOOL bHorz
  1479. ) const;
  1480. virtual CSize _CalcLayout(
  1481. DWORD dwMode,
  1482. int nLength = -1
  1483. );
  1484. virtual CSize _CalcSize( BOOL bVerticallyDocked );
  1485. virtual void _SizeToolBar(
  1486. int nLength,
  1487. BOOL bVert = FALSE
  1488. );
  1489. virtual int _WrapToolBarV(
  1490. int nHeight
  1491. );
  1492. virtual int _WrapToolBarH(
  1493. int nWidth,
  1494. int nHeight = 32767
  1495. );
  1496. protected:
  1497.     virtual void _DraggingUpdateState(
  1498. const CPoint & point,
  1499. bool bForceFloatMode
  1500. );
  1501. virtual CSize _CalcDesiredMinOuterSize( BOOL bHorz ) const;
  1502. CExtControlBar::InternalAffixmentData m_AffixmentData;
  1503. virtual CExtControlBar::InternalAffixmentData *
  1504. _AffixmentGetOuter();
  1505. virtual void _AffixmentSetOuter(
  1506. CExtControlBar::InternalAffixmentData * pAffixmentData
  1507. );
  1508. protected:
  1509. bool m_bHelperTempFullRowMode:1, m_bInsideCalcLayout:1;
  1510. public:
  1511. virtual bool _AffixmentIsAlignedHW() const;
  1512. virtual bool _GetFullRowMode() const;
  1513. static LRESULT _ContinueHelpHitTestMode(
  1514. CExtToolControlBar * pBar
  1515. );
  1516. public:
  1517. virtual CSize _GetDefButtonSize() const;
  1518. int _GetIndexOf( CExtBarButton * pTBB );
  1519. virtual bool IsPaletteChevronMenu() const;
  1520. public:
  1521. void _SwitchMenuTrackingIndex(
  1522. int iNewMenuTrackingIndex = -1
  1523. );
  1524. static CExtToolControlBar * _GetMenuTrackingBar();
  1525. static void _CloseTrackingMenus();
  1526. static void _CloseCustomMenusAll();
  1527. virtual void _CloseCustomMenus();
  1528. static CExtToolControlBar * _GetMenuTrackingToolControlBar();
  1529. static CExtMenuControlBar * _GetMenuTrackingMenuControlBar();
  1530. static void _CbPaintCombinedContent(
  1531. LPVOID pCookie,
  1532. CDC & dc,
  1533. const CWnd & refWndMenu,
  1534. const CRect & rcExcludeArea, // in screen coords
  1535. int eCombineAlign // CExtPopupMenuWnd::e_combine_align_t values
  1536. );
  1537. public:
  1538. static bool g_bMenuTracking;
  1539. static bool g_bMenuTrackingExpanded;
  1540. static bool g_bToolbarLargeIcons;
  1541. static bool g_bToolbarScreenTips;
  1542. static bool g_bToolbarShortcutKeysOnScreenTips;
  1543. bool m_bEnableDblClickToggleDocking:1;
  1544. static bool g_bEnableDblClickToggleDocking;
  1545. protected:
  1546. int m_nBtnIdxMenuTracking;
  1547. int m_nBtnIdxCapture;    // index of button with capture (-1 => none)
  1548. int m_nBtnIdxHover;
  1549. volatile int m_nUpdateCtrlLockCount;
  1550. public:
  1551. virtual void _UpdateCtrlLock();
  1552. virtual void _UpdateCtrlUnlock();
  1553. virtual bool _UpdateCtrlIsLocked() const;
  1554. virtual bool _UpdateCtrlIsEnabled(
  1555. CExtBarButton * pTBB
  1556. );
  1557. virtual void _UpdateCtrlAll();
  1558. int _GetTrackingButtonIndex() const
  1559. {
  1560. ASSERT_VALID( this );
  1561. return m_nBtnIdxMenuTracking;
  1562. }
  1563. int _GetHoverButtonIndex() const
  1564. {
  1565. ASSERT_VALID( this );
  1566. return m_nBtnIdxHover;
  1567. }
  1568. virtual void OnUpdateCmdUI(
  1569. CFrameWnd* pTarget,
  1570. BOOL bDisableIfNoHndler
  1571. );
  1572. virtual bool OnQueryMultiRowLayout() const;
  1573. virtual bool _IsSimplifiedDropDownButtons() const;
  1574. virtual bool _OnMouseMoveMsg(UINT nFlags, CPoint point);
  1575. virtual bool IsForceHoverWhenMenuTracking() const;
  1576. protected:
  1577. virtual bool _CanDockToInnerCircles() const;
  1578. virtual bool _CanDockToTabbedContainers(
  1579. CExtControlBar * pDestBar
  1580. ) const;
  1581. public:
  1582. virtual CFont * OnGetToolbarFont(
  1583. bool bVert,
  1584. bool bMeasureFont
  1585. );
  1586. virtual void DoPaint( CDC * pDC );
  1587. protected:
  1588. int _HitTestImpl(
  1589. CPoint point,
  1590. UINT nButtonStyleInclude = 0, // button must have style
  1591. UINT nButtonStyleExclude = 0,  // button must have not style
  1592. bool bAllowFindNearest = false // if did not hit - find nearest
  1593. ) const;
  1594. public:
  1595. virtual int HitTest( CPoint point ) const;
  1596. protected:
  1597. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  1598. CPoint point,
  1599. TOOLINFO * pTI
  1600. ) const;
  1601. public:
  1602. virtual bool OnQueryHoverBasedMenuTracking(
  1603. const CExtBarButton * pTBB
  1604. ) const;
  1605. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  1606. protected:
  1607. CExtCustomizeSite * m_pCustomizeSite;
  1608. CExtBarButton * m_pDragSourceTBB, * m_pDragTargetTBB;
  1609. int m_nDragTargetShift;
  1610. bool m_bHelperSeparatorAction:1;
  1611. public:
  1612. bool
  1613. m_bCustomizationAllowed:1,
  1614. m_bAutoShowOnCustomizationStart:1,
  1615. m_bAutoHideOnCustomizationEnd:1;
  1616. virtual CExtCustomizeSite * GetCustomizeSite();
  1617. CExtCustomizeSite * GetCustomizeSite() const;
  1618. virtual bool OnCustomizeRegisterBar(
  1619. CExtCustomizeSite * pCustomizeSite
  1620. );
  1621. virtual void OnCustomizeGetBarInfo(
  1622. CExtCustomizeSite::CToolBarCustomizeInfo * pInfo
  1623. );
  1624. virtual void OnCustomizeUpdateInitialBarState(
  1625. CExtCustomizeCmdTreeNode * pParentNode,
  1626. bool bRecalcLayout
  1627. );
  1628. virtual void OnCustomizeModeEnter();
  1629. virtual void OnCustomizeModeLeave();
  1630. virtual void OnCustomizeListBoxUpdate( CExtCustomizeToolbarsListBox * pWndList );
  1631. virtual bool _IsDockSiteCustomizeMode() const;
  1632. // CExtCustomizeSite::ICustomizeDropTarget
  1633. virtual DROPEFFECT OnCustomizeTargetOver(
  1634. CExtCustomizeSite::CCmdDragInfo & _dragInfo,
  1635. CPoint point,
  1636. DWORD dwKeyState
  1637. );
  1638. virtual void OnCustomizeTargetLeave();
  1639. virtual bool OnCustomizeTargetDrop(
  1640. CExtCustomizeSite::CCmdDragInfo & _dragInfo,
  1641. CPoint point,
  1642. DROPEFFECT de
  1643. );
  1644. virtual INT OnCustomizeCalcCmdNodePos(
  1645. INT nButtonPos,
  1646. bool * p_bReinitGroupStart = NULL
  1647. );
  1648. // CExtCustomizeSite::ICustomizeDropSource
  1649. virtual void OnCustomizeSourceDragComplete(
  1650. DROPEFFECT de,
  1651. bool bCanceled,
  1652. bool * p_bNoResetActiveItem
  1653. );
  1654. virtual bool OnCustomizeCanShowHideButtons();
  1655. virtual void OnCustomizeInitShowHideButtonMenu(
  1656. CExtPopupMenuWnd * pFolder
  1657. );
  1658. static bool stat_CbXtraMarkState(
  1659. CExtPopupMenuWnd * pPopup,
  1660. LPVOID pItemData
  1661. );
  1662. static bool stat_CbCmdDeliver(
  1663. CExtPopupMenuWnd * pPopup,
  1664. LPVOID pItemData
  1665. );
  1666. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  1667. public:
  1668. class __PROF_UIS_API FtLayoutQuery
  1669. {
  1670. public:
  1671. CArray < CRect, CRect > m_arrRowRects;
  1672. CArray < INT, INT > m_arrRowBtnIndices;
  1673. CExtToolControlBar * m_pToolBar;
  1674. CExtMiniDockFrameWnd * m_pMiniFrame;
  1675. HWND m_hWndFor;
  1676. FtLayoutQuery();
  1677. ~FtLayoutQuery();
  1678. void Empty();
  1679. bool Query( HWND hWndFor );
  1680. void ReMapRectsToTargetClient();
  1681. void ReMapRectsToTargetWindow();
  1682. void DrawRects( CDC & dc );
  1683. }; // class FtLayoutQuery
  1684. bool _DoFtLayoutQuery(
  1685. FtLayoutQuery * pFtLayoutQuery,
  1686. CDC * pToolBarOutputDC
  1687. ) const;
  1688. virtual bool OnDeliverCmd( CExtBarButton * pTBB );
  1689. virtual void AnimationSite_OnProgressShutdownTimer( UINT nTimerID );
  1690. protected:
  1691. //{{AFX_VIRTUAL(CExtToolControlBar)
  1692. //}}AFX_VIRTUAL
  1693. //{{AFX_MSG(CExtToolControlBar)
  1694. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  1695. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  1696. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  1697. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  1698. afx_msg void OnCancelMode();
  1699. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  1700. afx_msg void OnSize(UINT nType, int cx, int cy);
  1701. afx_msg void OnTimer(__EXT_MFC_UINT_PTR nIDEvent);
  1702. afx_msg void OnCaptureChanged(CWnd *pWnd);
  1703. //}}AFX_MSG
  1704. afx_msg void OnSettingChange(UINT uFlags, __EXT_MFC_SAFE_LPCTSTR lpszSection);
  1705. afx_msg LRESULT OnTrackButtonMenu(WPARAM wParam,LPARAM lParam);
  1706. afx_msg LRESULT OnMenuClosed( WPARAM wParam, LPARAM lParam );
  1707. DECLARE_MESSAGE_MAP()
  1708. #if _MFC_VER < 0x700
  1709. afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
  1710. #else
  1711. afx_msg void OnActivateApp(BOOL bActive, DWORD hTask);
  1712. #endif
  1713. }; // class CExtToolControlBar
  1714. /////////////////////////////////////////////////////////////////////////////
  1715. // CExtPanelControlBar
  1716. class __PROF_UIS_API CExtPanelControlBar : public CExtToolControlBar
  1717. {
  1718. public:
  1719. DECLARE_DYNCREATE( CExtPanelControlBar );
  1720. // Construction
  1721. public:
  1722. CExtPanelControlBar();
  1723. // Attributes
  1724. public:
  1725. CRect m_rcMargins;
  1726. // Operations
  1727. public:
  1728. virtual CSize CalcFixedLayout(
  1729. BOOL bStretch,
  1730. BOOL bHorz
  1731. );
  1732.     virtual CSize CalcDynamicLayout(
  1733. int nLength,
  1734. DWORD dwMode
  1735. );
  1736. enum e_fixed_bar_size_query_t
  1737. {
  1738. __FSQ_FLOATING = 0,
  1739. __FSQ_DOCKED_H = 1,
  1740. __FSQ_DOCKED_V = 2,
  1741. };
  1742. // called when need to know new bar size after re-docking
  1743. virtual CSize OnQueryFixedBarNewSize(
  1744. CExtPanelControlBar::e_fixed_bar_size_query_t eWhichSizeNeedToKnow
  1745. ) const;
  1746. // should return size of margins for single child window
  1747. virtual CRect OnQueryFixedBarChildWindowMargins() const;
  1748. protected:
  1749. virtual CSize _QueryFixedBarNewSize(
  1750. CExtPanelControlBar::e_fixed_bar_size_query_t eWhichSizeNeedToKnow
  1751. ) const;
  1752. CSize _CalcLayout(
  1753. DWORD dwMode,
  1754. int nLength = -1
  1755. );
  1756. virtual CSize _CalcDesiredMinOuterSize( BOOL bHorz ) const;
  1757. virtual INT _CalcDesiredMinHW() const;
  1758. virtual INT _CalcDesiredMinVH() const;
  1759. virtual CSize _CalcDesiredMinFloatedSize() const;
  1760. virtual void _RepositionChild(
  1761. bool bRedraw = true
  1762. );
  1763. virtual CSize _GetChildSize() const;
  1764. public:
  1765. virtual bool _AffixmentIsAlignedHW() const;
  1766. virtual bool OnQueryMultiRowLayout() const;
  1767. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  1768. public:
  1769. virtual CExtCustomizeSite * GetCustomizeSite();
  1770. virtual bool OnCustomizeRegisterBar(
  1771. CExtCustomizeSite * pCustomizeSite
  1772. );
  1773. virtual void OnCustomizeModeEnter();
  1774. virtual void OnCustomizeModeLeave();
  1775. virtual void OnCustomizeListBoxUpdate( CExtCustomizeToolbarsListBox * pWndList );
  1776. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  1777. // Implementation
  1778. public:
  1779. virtual ~CExtPanelControlBar();
  1780. virtual LRESULT DoHelpHitTest( CPoint ptHelpHitTest );
  1781. //{{AFX_VIRTUAL(CExtPanelControlBar)
  1782. //}}AFX_VIRTUAL
  1783. //{{AFX_MSG(CExtPanelControlBar)
  1784. afx_msg void OnSize(UINT nType, int cx, int cy);
  1785. afx_msg void OnPaint();
  1786. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  1787. afx_msg void OnSetFocus(CWnd* pOldWnd);
  1788. //}}AFX_MSG
  1789. DECLARE_MESSAGE_MAP()
  1790. }; // class CExtPanelControlBar
  1791. #ifndef __EXT_MFC_NO_UNDO_REDO_POPUP
  1792. /////////////////////////////////////////////////////////////////////////////
  1793. // CExtBarUndoRedoButton
  1794. class __PROF_UIS_API CExtBarUndoRedoButton : public CExtBarButton
  1795. {
  1796. public:
  1797. DECLARE_DYNCREATE( CExtBarUndoRedoButton );
  1798. CExtBarUndoRedoButton(
  1799. CExtToolControlBar * pBar = NULL,
  1800. UINT nCmdID = ID_SEPARATOR,
  1801. UINT nStyle = 0
  1802. );
  1803. virtual ~CExtBarUndoRedoButton();
  1804. virtual LPARAM LParamCookieGet() const;
  1805. virtual void LParamCookieSet(
  1806. LPARAM lParamCookie = 0L
  1807. );
  1808. bool CanBePressedInDisabledState();
  1809. virtual bool IsAbleToTrackMenu(
  1810. bool bCustomizeMode = false
  1811. ) const;
  1812. virtual LRESULT OnHelpHitTest(
  1813. CPoint point
  1814. );
  1815. virtual UINT OnTrackPopup(
  1816. CPoint point,
  1817. bool bSelectAny,
  1818. bool bForceNoAnimation
  1819. );
  1820. virtual BOOL PutToPopupMenu(
  1821. CExtPopupMenuWnd * pPopup
  1822. );
  1823. virtual CExtPopupMenuWnd * OnCreateDropPopup(
  1824. bool bContentExpand // true - inserting to content expand menu, false - tracking dropped popup
  1825. );
  1826. virtual bool OnPopupListBoxInitContent(
  1827. CExtPopupInplaceListBox & wndListBox
  1828. );
  1829. virtual bool OnPopupListBoxSelChange(
  1830. CExtPopupInplaceListBox & wndListBox
  1831. );
  1832. virtual bool OnPopupListBoxSelEndOK(
  1833. CExtPopupInplaceListBox & wndListBox
  1834. );
  1835. virtual bool OnPopupListBoxSelEndCancel(
  1836. CExtPopupInplaceListBox & wndListBox
  1837. );
  1838. virtual bool OnPopupListBoxClose(
  1839. CExtPopupInplaceListBox & wndListBox
  1840. );
  1841. virtual bool OnPopupListBoxItemDraw(
  1842. CExtPopupInplaceListBox & wndListBox,
  1843. LPDRAWITEMSTRUCT pDIS
  1844. );
  1845. virtual bool OnPopupListBoxItemMeasure(
  1846. CExtPopupInplaceListBox & wndListBox,
  1847. LPMEASUREITEMSTRUCT pMIS
  1848. );
  1849. virtual CSize OnPopupListBoxMeasureTrackSize() const;
  1850. virtual CSize OnPopupListBoxCalcItemExtraSizes() const;
  1851. virtual bool OnPopupUndoRedoFormatCaption(
  1852. CExtSafeString & strCaption,
  1853. CExtPopupUndoRedoMenuWnd * pUndoRedoPopupMenuWnd
  1854. );
  1855. protected:
  1856. LPARAM m_lParamCookie;
  1857. DWORD m_dwListBoxStyles; // popup list-box styles
  1858. CExtSafeStringArray m_arrLbItems;
  1859. INT m_nDropDownWidth; // (-1) - auto calc
  1860. INT m_nDropDownHeightMax;
  1861. static bool stat_CbFormatCaption(
  1862. CExtSafeString & strCaption,
  1863. CExtPopupUndoRedoMenuWnd * pUndoRedoPopupMenuWnd,
  1864. CExtBarUndoRedoButton * pUndoRedoTBB
  1865. );
  1866. static bool stat_CbInitListBoxContent(
  1867. CExtPopupInplaceListBox & wndListBox,
  1868. CExtBarUndoRedoButton * pUndoRedoTBB
  1869. );
  1870. static bool stat_CbListBoxSelection(
  1871. CExtPopupInplaceListBox & wndListBox,
  1872. CExtBarUndoRedoButton * pUndoRedoTBB,
  1873. int eSAT // CExtPopupInplaceListBox::e_sel_action_t
  1874. );
  1875. static bool stat_CbListBoxItemDraw(
  1876. CExtPopupInplaceListBox & wndListBox,
  1877. CExtBarUndoRedoButton * pUndoRedoTBB,
  1878. LPDRAWITEMSTRUCT pDIS
  1879. );
  1880. static bool stat_CbListBoxItemMeasure(
  1881. CExtPopupInplaceListBox & wndListBox,
  1882. CExtBarUndoRedoButton * pUndoRedoTBB,
  1883. LPMEASUREITEMSTRUCT pMIS
  1884. );
  1885. }; // class CExtBarUndoRedoButton
  1886. #endif // __EXT_MFC_NO_UNDO_REDO_POPUP
  1887. #endif // __EXT_TOOLCONTROLBAR_H