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

界面编程

开发平台:

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_CONTROLBAR_TABBED_FEATURES_H)
  22. #define __EXT_CONTROLBAR_TABBED_FEATURES_H
  23. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  24. #if (!defined __EXT_MFC_DEF_H)
  25. #include <ExtMfcDef.h>
  26. #endif // __EXT_MFC_DEF_H
  27. #if (!defined __EXTDOCKBAR_H)
  28. #include <../Src/ExtDockBar.h>
  29. #endif // __EXTDOCKBAR_H
  30. class CExtPopupMenuTipWnd;
  31. /////////////////////////////////////////////////////////////////////////
  32. // CExtDockDynTabBar window
  33. class __PROF_UIS_API CExtDockDynTabBar : public CExtDockDynBar
  34. {
  35. public:
  36. CExtDockDynTabBar( UINT nCircleNo = 0 );
  37. DECLARE_DYNCREATE( CExtDockDynTabBar );
  38. virtual void OnDynamicLayoutUpdate();
  39. virtual void OnDynamicLayoutOptimize();
  40. // this is the one and only method of interest
  41. virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
  42. virtual void CalcOrderedVector(
  43. ExtControlBarVector_t & vBars
  44. );
  45. CSize _RepositionTabbedChilds(
  46. bool bLockChilds
  47. );
  48. void _SyncTabbedChilds(
  49. bool bSyncSizes,
  50. bool bSyncSwitcher
  51. );
  52. public:
  53. #ifdef _DEBUG
  54. virtual void AssertValid() const
  55. {
  56. CExtDockDynBar::AssertValid();
  57. }
  58. virtual void Dump( CDumpContext & dc ) const
  59. {
  60. CExtDockDynBar::Dump( dc );
  61. }
  62. #endif
  63. // Overrides
  64. // ClassWizard generated virtual function overrides
  65. //{{AFX_VIRTUAL(CExtDockDynTabBar)
  66. public:
  67. virtual BOOL PreTranslateMessage(MSG* pMsg);
  68. //}}AFX_VIRTUAL
  69. //{{AFX_MSG(CExtDockDynTabBar)
  70. //}}AFX_MSG
  71. DECLARE_MESSAGE_MAP()
  72. }; // class CExtDockDynTabBar
  73. /////////////////////////////////////////////////////////////////////////
  74. // CExtDynTabWnd window
  75. class __PROF_UIS_API CExtDynTabWnd : public CExtTabWnd
  76. {
  77. protected:
  78. class __PROF_UIS_API CDynDropTarget : public COleDropTarget
  79. {
  80. CExtDynTabWnd * m_pWndDynTab;
  81. public:
  82. CDynDropTarget()
  83. : m_pWndDynTab( NULL )
  84. {
  85. }
  86. virtual DROPEFFECT OnDragEnter(
  87. CWnd * pWnd,
  88. COleDataObject * pDataObject,
  89. DWORD dwKeyState,
  90. CPoint point
  91. )
  92. {
  93. ASSERT_VALID( this );
  94. return OnDragOver( pWnd, pDataObject, dwKeyState, point );
  95. }
  96. virtual DROPEFFECT OnDragOver(
  97. CWnd * pWnd,
  98. COleDataObject * pDataObject,
  99. DWORD dwKeyState,
  100. CPoint point
  101. );
  102. friend class CExtDynTabWnd;
  103. }; // class CDynDropTarget
  104. CDynDropTarget m_oleDropTarget;
  105. public:
  106. CExtDynTabWnd();
  107. DECLARE_DYNCREATE( CExtDynTabWnd );
  108. #ifdef _DEBUG
  109. virtual void AssertValid() const
  110. {
  111. CExtTabWnd::AssertValid();
  112. }
  113. virtual void Dump( CDumpContext & dc ) const
  114. {
  115. CExtTabWnd::Dump( dc );
  116. }
  117. #endif
  118. protected:
  119. virtual CExtCmdIcon * OnTabWndQueryItemIcon(
  120. const TAB_ITEM_INFO * pTii
  121. ) const;
  122. virtual __EXT_MFC_SAFE_LPCTSTR OnTabWndQueryItemText(
  123. const TAB_ITEM_INFO * pTii
  124. ) const;
  125. virtual bool OnTabWndStartDrag( LONG nIndex );
  126. virtual bool OnTabWndClickedItem(
  127. LONG nItemIndex,
  128. bool bButtonPressed,
  129. INT nMouseButton, // MK_... values
  130. UINT nMouseEventFlags
  131. );
  132. virtual bool OnTabWndSelectionChange(
  133. LONG nOldItemIndex,
  134. LONG nNewItemIndex,
  135. bool bPreSelectionTest
  136. );
  137. virtual void OnTabWndDrawItem(
  138. CDC & dc,
  139. CRect & rcTabItemsArea,
  140. LONG nItemIndex,
  141. TAB_ITEM_INFO * pTii,
  142. bool bTopLeft,
  143. bool bHorz,
  144. bool bSelected,
  145. bool bCenteredText,
  146. bool bGroupedMode,
  147. bool bInGroupActive,
  148. bool bInvertedVerticalMode,
  149. const CRect & rcEntireItem,
  150. CSize sizeTextMeasured,
  151. CFont * pFont,
  152. __EXT_MFC_SAFE_LPCTSTR sText,
  153. CExtCmdIcon * pIcon
  154. );
  155. virtual bool OnTabWndProcessDrag( 
  156. LONG nIndex 
  157. )
  158. {
  159. nIndex;
  160. return false;
  161. }
  162. LONG m_nSavedIndex;
  163. public:
  164. LONG FindControlBar(
  165. const CExtControlBar * pBar
  166. ) const
  167. {
  168. ASSERT_VALID( this );
  169. ASSERT_VALID( pBar );
  170. LPARAM lParam =
  171. reinterpret_cast < LPARAM > ( pBar );
  172. LONG nIndex = ItemFindByLParam( lParam, -1, true, true );
  173. return nIndex;
  174. }
  175. void SaveIndex( LONG nIndex = -1 )
  176. {
  177. ASSERT_VALID( this );
  178. m_nSavedIndex = nIndex;
  179. }
  180. void SaveIndex( CExtControlBar * pBar )
  181. {
  182. ASSERT_VALID( this );
  183. ASSERT_VALID( pBar );
  184. m_nSavedIndex = FindControlBar( pBar );
  185. ASSERT( m_nSavedIndex >= 0 && m_nSavedIndex < ItemGetCount() );
  186. }
  187. void RestoreIndex( CExtControlBar * pBar )
  188. {
  189. ASSERT_VALID( this );
  190. ASSERT_VALID( pBar );
  191. ASSERT( pBar->GetParent()->GetParent() == GetParent() );
  192. ASSERT( m_nSavedIndex >= 0 && m_nSavedIndex <= ItemGetCount() );
  193. LONG nExistingIndex = FindControlBar( pBar );
  194. if( nExistingIndex != m_nSavedIndex )
  195. {
  196. if( nExistingIndex >= 0 )
  197. ItemRemove( nExistingIndex, 1, false );
  198. ASSERT( m_nSavedIndex >= 0 && m_nSavedIndex <= ItemGetCount() );
  199. InsertControlBar( pBar, m_nSavedIndex );
  200. }
  201. m_nSavedIndex = -1L;
  202. UpdateTabWnd( true );
  203. }
  204. LONG SelectControlBar( CExtControlBar * pBar );
  205. void InsertControlBar(
  206. CExtControlBar * pBar,
  207. INT nPos = -1, // default - append
  208. bool bTempOnDrag = false, // is tab item temporary (when dragging)
  209. bool bUpdateTabWnd = false
  210. );
  211. void RemoveTemporaryItems(
  212. bool bUpdateTabWnd = false
  213. );
  214. CExtControlBar * GetBarAt(
  215. LONG nIndex,
  216. bool bExcludeTemporary
  217. );
  218. LONG ReindexPosCalc( CPoint ptCursor );
  219. // Overrides
  220. // ClassWizard generated virtual function overrides
  221. //{{AFX_VIRTUAL(CExtDynTabWnd)
  222. public:
  223. virtual BOOL PreTranslateMessage(MSG* pMsg);
  224. //}}AFX_VIRTUAL
  225. //{{AFX_MSG(CExtDynTabWnd)
  226. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  227. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  228. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  229. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  230. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  231. //}}AFX_MSG
  232. DECLARE_MESSAGE_MAP()
  233. friend class CExtDynTabControlBar;
  234. }; // class CExtDynTabWnd
  235. /////////////////////////////////////////////////////////////////////////
  236. // CExtDynTabControlBar window
  237. class __PROF_UIS_API CExtDynTabControlBar : public CExtDynControlBar
  238. {
  239. protected:
  240. CExtDynTabWnd * m_pWndTabSwitcher;
  241. virtual CExtDynTabWnd * _OnQueryTabSwitcherWndInstance();
  242. const CExtDynTabWnd * _OnQueryTabSwitcherWndInstance() const;
  243. public:
  244. DECLARE_DYNCREATE( CExtDynTabControlBar );
  245. CExtDynTabControlBar();
  246. virtual ~CExtDynTabControlBar();
  247. #ifdef _DEBUG
  248. virtual void AssertValid() const
  249. {
  250. CExtDynControlBar::AssertValid();
  251. }
  252. virtual void Dump( CDumpContext & dc ) const
  253. {
  254. CExtDynControlBar::Dump( dc );
  255. }
  256. #endif
  257. public:
  258. virtual bool OnSwitcherSelectionChange(
  259. LONG nOldItemIndex,
  260. LONG nNewItemIndex,
  261. bool bPreSelectionTest
  262. );
  263. virtual bool IsBarWithGripper(
  264. bool * pbGripperAtTop = NULL,
  265. bool * pbTextOnGripper = NULL
  266. ) const;
  267. virtual void OnShowControlBarChain(
  268. bool bShow,
  269. bool bDelay,
  270. bool bOnlyOneBar = false
  271. );
  272. void InsertTemporaryItemsFrom(
  273. CExtControlBar * pBar,
  274. LONG nIndex,
  275. bool bUpdateTabWnd
  276. );
  277. void InsertBar( 
  278. CExtControlBar * pBar,
  279. LONG nIndex,
  280. bool bUpdateTabWnd
  281. );
  282. void UpdateBarVisibility(
  283. CExtControlBar * pBar
  284. );
  285. LONG FindControlBar(
  286. const CExtControlBar * pBar
  287. ) const
  288. {
  289. ASSERT_VALID( this );
  290. return _OnQueryTabSwitcherWndInstance()->FindControlBar( pBar );
  291. }
  292. void SaveIndex( LONG nIndex = -1 )
  293. {
  294. ASSERT_VALID( this );
  295. _OnQueryTabSwitcherWndInstance()->SaveIndex( nIndex );
  296. }
  297. void SaveIndex( CExtControlBar * pBar )
  298. {
  299. ASSERT_VALID( this );
  300. _OnQueryTabSwitcherWndInstance()->SaveIndex( pBar );
  301. }
  302. void RestoreIndex( CExtControlBar * pBar )
  303. {
  304. ASSERT_VALID( this );
  305. _OnQueryTabSwitcherWndInstance()->RestoreIndex( pBar );
  306. }
  307. void SelectControlBar( CExtControlBar * pBar )
  308. {
  309. ASSERT_VALID( this );
  310. _OnQueryTabSwitcherWndInstance()->SelectControlBar( pBar );
  311. }
  312. void InsertControlBar(
  313. CExtControlBar * pBar,
  314. INT nPos = -1, // default - append
  315. bool bTempOnDrag = false, // is tab item temporary (when dragging)
  316. bool bUpdateTabWnd = false
  317. )
  318. {
  319. ASSERT_VALID( this );
  320. _OnQueryTabSwitcherWndInstance()->InsertControlBar( pBar, nPos, bTempOnDrag, bUpdateTabWnd );
  321. }
  322. void RemoveTemporaryItems(
  323. bool bUpdateTabWnd = false
  324. )
  325. {
  326. ASSERT_VALID( this );
  327. _OnQueryTabSwitcherWndInstance()->RemoveTemporaryItems( bUpdateTabWnd );
  328. }
  329. CExtControlBar * GetBarAt(
  330. LONG nIndex,
  331. bool bExcludeTemporary
  332. )
  333. {
  334. ASSERT_VALID( this );
  335. return _OnQueryTabSwitcherWndInstance()->GetBarAt( nIndex, bExcludeTemporary );
  336. }
  337. LONG ReindexPosCalc( CPoint ptCursor )
  338. {
  339. ASSERT_VALID( this );
  340. return _OnQueryTabSwitcherWndInstance()->ReindexPosCalc( ptCursor );
  341. }
  342. void InvalidateSwitcher()
  343. {
  344. ASSERT_VALID( this );
  345. CExtDynTabWnd * pWndTabSwitcher = _OnQueryTabSwitcherWndInstance();
  346. if( pWndTabSwitcher->GetSafeHwnd() == NULL
  347. || ( ! ::IsWindow( pWndTabSwitcher->GetSafeHwnd() ) )
  348. || ( ! pWndTabSwitcher->IsWindowVisible() )
  349. )
  350. return;
  351. pWndTabSwitcher->Invalidate();
  352. //pWndTabSwitcher->UpdateWindow();
  353. }
  354. virtual bool NcButtons_HandleClick(
  355. CExtBarNcAreaButton * pNcAreaButton,
  356. CPoint point,
  357. CExtControlBar * pBarEventSource,
  358. CExtControlBar * pBarActiveInContainer
  359. );
  360. virtual void NcButtons_PostClick(
  361. CExtBarNcAreaButton * pNcAreaButton,
  362. CPoint point,
  363. CExtControlBar * pBarEventSource,
  364. CExtControlBar * pBarActiveInContainer
  365. );
  366. virtual bool NcButtons_HandleQueryVisibility(
  367. bool & bButtonIsVisible,
  368. CExtBarNcAreaButton * pNcAreaButton,
  369. CExtControlBar * pBarEventSource,
  370. CExtControlBar * pBarActiveInContainer
  371. );
  372. virtual bool NcButtons_HandleDraw(
  373. CDC & dc,
  374. CExtBarNcAreaButton * pNcAreaButton,
  375. CExtControlBar * pBarEventSource,
  376. CExtControlBar * pBarActiveInContainer
  377. );
  378. virtual bool NcButtons_HandleHitTest(
  379. UINT & nExternalHT,
  380. CPoint point,
  381. CExtBarNcAreaButton * pNcAreaButton,
  382. CExtControlBar * pBarEventSource,
  383. CExtControlBar * pBarActiveInContainer
  384. );
  385. virtual bool NcButtons_HandleQueryCursor(
  386. HCURSOR & hExternalCursor,
  387. CPoint point,
  388. CExtBarNcAreaButton * pNcAreaButton,
  389. CExtControlBar * pBarEventSource,
  390. CExtControlBar * pBarActiveInContainer
  391. );
  392. virtual bool NcButtons_HandleReposition(
  393. CExtBarNcAreaButton * pPrevBtn,
  394. CExtBarNcAreaButton * pNcAreaButton,
  395. CExtControlBar * pBarEventSource,
  396. CExtControlBar * pBarActiveInContainer
  397. );
  398. virtual bool NcButtons_HandleToolHitTest(
  399. __EXT_MFC_INT_PTR & hExternalToolHT,
  400. CPoint point,
  401. TOOLINFO * pTI,
  402. CExtBarNcAreaButton * pNcAreaButton,
  403. CExtControlBar * pBarEventSource,
  404. CExtControlBar * pBarActiveInContainer
  405. );
  406. void SyncSwitcher();
  407. void RemoveSelFromSwitcher();
  408. void RemoveControlBar( CExtControlBar * pBar );
  409. bool IsSwitcherVisible()
  410. {
  411. ASSERT_VALID( this );
  412. CExtDynTabWnd * pWndTabSwitcher = _OnQueryTabSwitcherWndInstance();
  413. ASSERT_VALID( pWndTabSwitcher );
  414. if( pWndTabSwitcher->GetSafeHwnd() == NULL
  415. || ( ! ::IsWindow( pWndTabSwitcher->GetSafeHwnd() ) )
  416. )
  417. return false;
  418. bool bVisible = (pWndTabSwitcher->GetStyle() & WS_VISIBLE) ? true : false;
  419. return bVisible;
  420. }
  421. void GetSwitcherWindowRect( RECT * pRcSwitcherWnd ) const
  422. {
  423. ASSERT_VALID( this );
  424. ASSERT( pRcSwitcherWnd != NULL );
  425. _OnQueryTabSwitcherWndInstance()->GetWindowRect( pRcSwitcherWnd );
  426. }
  427. LONG GetSwitcherItemCount() const
  428. {
  429. ASSERT_VALID( this );
  430. return _OnQueryTabSwitcherWndInstance()->ItemGetCount();
  431. }
  432. LONG SetSwitcherSelection(
  433. LONG nSelIndex,
  434. bool bEnsureVisible = false,
  435. bool bUpdateTabWnd = false
  436. )
  437. {
  438. ASSERT_VALID( this );
  439. CExtDynTabWnd * pWndTabSwitcher = _OnQueryTabSwitcherWndInstance();
  440. ASSERT_VALID( pWndTabSwitcher );
  441. LONG nItemCount = pWndTabSwitcher->ItemGetCount();
  442. LONG nValidSelIndex = 0;
  443. LONG nItemIndex = 0L;
  444. for( ; nItemIndex < nItemCount; nItemIndex ++ )
  445. {
  446. CExtTabWnd::TAB_ITEM_INFO * pTII = pWndTabSwitcher->ItemGet( nItemIndex );
  447. ASSERT_VALID( pTII );
  448. if( ! pTII->VisibleGet() )
  449. continue;
  450. if( nValidSelIndex == nSelIndex )
  451. break;
  452. nValidSelIndex ++;
  453. } // for( ; nItemIndex < nItemCount; nItemIndex ++ )
  454. if( nItemIndex != nItemCount )
  455. nSelIndex = nItemIndex;
  456. return pWndTabSwitcher->SelectionSet( nSelIndex, bEnsureVisible, bUpdateTabWnd );
  457. }
  458. LONG GetSwitcherSelection() const
  459. {
  460. ASSERT_VALID( this );
  461. return _OnQueryTabSwitcherWndInstance()->SelectionGet();
  462. }
  463. void SetSwitcherRedraw( bool bRedraw )
  464. {
  465. _OnQueryTabSwitcherWndInstance()->SetRedraw( bRedraw ? TRUE : FALSE );
  466. }
  467. virtual bool IsCloseOnlyOneBarInTabGroup() const;
  468. protected:
  469. virtual bool _CanDockToTabbedContainers(
  470. CExtControlBar * pDestBar
  471. ) const;
  472. virtual CExtDynTabControlBar * _GetNearestTabbedContainer();
  473. void _InsertTemporaryItemsFromImpl(
  474. CExtControlBar * pBar,
  475. LONG & nIndex
  476. );
  477. void _InsertBarImpl( 
  478. CExtControlBar * pBar,
  479. LONG & nIndex
  480. );
  481. INT _CalcTabHeight() const;
  482. virtual CSize _CalcLayoutMinSize() const;
  483. virtual INT _CalcDesiredMinHW() const;
  484. virtual INT _CalcDesiredMinVH() const;
  485. virtual CSize _CalcDesiredMinFloatedSize() const;
  486. virtual CSize CalcDynamicLayout(
  487. int nLength,
  488. DWORD nMode
  489. );
  490. virtual CExtDockDynBar * OnCreateDynamicDockBarObject();
  491. public:
  492. virtual void OnRepositionSingleChild(
  493. int cx = -1, // if negative - get from client area
  494. int cy = -1,
  495. bool bRedraw = true
  496. );
  497. virtual void OnGetBarCaptionText(
  498. e_bar_caption_text_t eBCT,
  499. CExtSafeString & strCaptionText
  500. ) const;
  501. // Overrides
  502. // ClassWizard generated virtual function overrides
  503. //{{AFX_VIRTUAL(CExtDynTabControlBar)
  504. public:
  505. virtual BOOL PreTranslateMessage(MSG* pMsg);
  506. //}}AFX_VIRTUAL
  507. //{{AFX_MSG(CExtDynTabControlBar)
  508. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  509. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  510. afx_msg void OnSetFocus(CWnd* pOldWnd);
  511. //}}AFX_MSG
  512. DECLARE_MESSAGE_MAP()
  513. friend class CExtDynTabWnd;
  514. }; // class CExtDynTabControlBar
  515. /////////////////////////////////////////////////////////////////////////
  516. // CExtDynAutoHideArea window
  517. class __PROF_UIS_API CExtDynAutoHideArea : public CExtTabWnd
  518. {
  519. protected:
  520. class __PROF_UIS_API CDynDropTarget : public COleDropTarget
  521. {
  522. CExtDynAutoHideArea * m_pWndAutoHideArea;
  523. CExtDynAutoHideSlider * m_pWndSlider;
  524. public:
  525. CDynDropTarget()
  526. : m_pWndAutoHideArea( NULL )
  527. , m_pWndSlider( NULL )
  528. {
  529. }
  530. virtual DROPEFFECT OnDragEnter(
  531. CWnd * pWnd,
  532. COleDataObject * pDataObject,
  533. DWORD dwKeyState,
  534. CPoint point
  535. )
  536. {
  537. ASSERT_VALID( this );
  538. return OnDragOver( pWnd, pDataObject, dwKeyState, point );
  539. }
  540. virtual DROPEFFECT OnDragOver(
  541. CWnd * pWnd,
  542. COleDataObject * pDataObject,
  543. DWORD dwKeyState,
  544. CPoint point
  545. );
  546. friend class CExtDynAutoHideArea;
  547. }; // class CDynDropTarget
  548. CDynDropTarget m_oleDropTarget;
  549. CExtDynAutoHideSlider * m_pWndSlider;
  550. bool m_bActivationLocked:1, m_bInsertMode:1;
  551. CRect m_rcLastPos;
  552. public:
  553. static bool g_bEmbeddedMode;
  554. bool m_bCancelNearestActivateAnimation:1;
  555. CExtDynAutoHideArea();
  556. DECLARE_DYNCREATE( CExtDynAutoHideArea );
  557. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  558. virtual void OnCustomizeModeEnter();
  559. virtual void OnCustomizeModeLeave();
  560. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  561. #ifdef _DEBUG
  562. virtual void AssertValid() const
  563. {
  564. CExtTabWnd::AssertValid();
  565. ASSERT( m_bReflectParentSizing );
  566. }
  567. virtual void Dump( CDumpContext & dc ) const
  568. {
  569. CExtTabWnd::Dump( dc );
  570. }
  571. #endif
  572. virtual DWORD GetTabWndStyle() const;
  573. virtual BOOL Create(
  574. CFrameWnd * pParentWnd,
  575. CExtDynAutoHideSlider * pWndSlider,
  576. UINT nDockedDockBarID
  577. );
  578. void AdjustOrder();
  579. void AppendControlBar(
  580. CExtControlBar * pBar,
  581. bool bForceNoShow
  582. );
  583. void RemoveControlBar(
  584. CExtControlBar * pBar,
  585. bool bForceNoShow
  586. );
  587. LONG FindControlBar(
  588. const CExtControlBar * pBar
  589. ) const
  590. {
  591. ASSERT_VALID( this );
  592. ASSERT_VALID( pBar );
  593. LPARAM lParam =
  594. reinterpret_cast < LPARAM > ( pBar );
  595. LONG nIndex = ItemFindByLParam( lParam, -1, true, true );
  596. return nIndex;
  597. }
  598. CExtDynAutoHideSlider * GetAutoHideSlider();
  599. protected:
  600. virtual void OnTabWndDrawItem(
  601. CDC & dc,
  602. CRect & rcTabItemsArea,
  603. LONG nItemIndex,
  604. TAB_ITEM_INFO * pTii,
  605. bool bTopLeft,
  606. bool bHorz,
  607. bool bSelected,
  608. bool bCenteredText,
  609. bool bGroupedMode,
  610. bool bInGroupActive,
  611. bool bInvertedVerticalMode,
  612. const CRect & rcEntireItem,
  613. CSize sizeTextMeasured,
  614. CFont * pFont,
  615. __EXT_MFC_SAFE_LPCTSTR sText,
  616. CExtCmdIcon * pIcon
  617. );
  618. virtual void OnTabWndItemInsert(
  619. LONG nItemIndex,
  620. TAB_ITEM_INFO * pTii
  621. );
  622. virtual CExtCmdIcon * OnTabWndQueryItemIcon(
  623. const TAB_ITEM_INFO * pTii
  624. ) const;
  625. virtual __EXT_MFC_SAFE_LPCTSTR OnTabWndQueryItemText(
  626. const TAB_ITEM_INFO * pTii
  627. ) const;
  628. virtual bool OnTabWndClickedItem(
  629. LONG nItemIndex,
  630. bool bButtonPressed,
  631. INT nMouseButton, // MK_... values
  632. UINT nMouseEventFlags
  633. );
  634. virtual bool OnTabWndSelectionChange(
  635. LONG nOldItemIndex,
  636. LONG nNewItemIndex,
  637. bool bPreSelectionTest
  638. );
  639. virtual void OnTabWndSyncVisibility();
  640. virtual void OnTabWndMeasureItemAreaMargins(
  641. LONG & nSpaceBefore,
  642. LONG & nSpaceAfter,
  643. LONG & nSpaceOver
  644. );
  645. public:
  646. static CExtDynAutoHideArea * stat_FindAreaOfBar(
  647. CExtControlBar * pBar,
  648. LONG * p_nSelIdx = NULL
  649. );
  650. static void stat_FindAreas(
  651. CFrameWnd * pDockSite,
  652. CExtDynAutoHideArea ** ppAreaTop,
  653. CExtDynAutoHideArea ** ppAreaBottom,
  654. CExtDynAutoHideArea ** ppAreaLeft,
  655. CExtDynAutoHideArea ** ppAreaRight
  656. );
  657. static void stat_FindAreas(
  658. HWND hWndStartSearch,
  659. CExtDynAutoHideArea ** ppAreaTop,
  660. CExtDynAutoHideArea ** ppAreaBottom,
  661. CExtDynAutoHideArea ** ppAreaLeft,
  662. CExtDynAutoHideArea ** ppAreaRight
  663. );
  664. bool _CanActivate();
  665. // Overrides
  666. // ClassWizard generated virtual function overrides
  667. //{{AFX_VIRTUAL(CExtDynAutoHideArea)
  668. public:
  669. virtual BOOL PreTranslateMessage(MSG* pMsg);
  670. protected:
  671. virtual void PostNcDestroy();
  672. //}}AFX_VIRTUAL
  673. //{{AFX_MSG(CExtDynAutoHideArea)
  674. afx_msg void OnSize(UINT nType, int cx, int cy);
  675. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  676. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  677. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  678. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  679. afx_msg void OnPaint();
  680. //}}AFX_MSG
  681. afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
  682. DECLARE_MESSAGE_MAP()
  683. friend class CExtDynAutoHideSlider;
  684. friend class CExtControlBar;
  685. friend class CExtBarNcAreaButton;
  686. }; // class CExtDynAutoHideArea
  687. /////////////////////////////////////////////////////////////////////////
  688. // CExtDynAutoHideSlider window
  689. class __PROF_UIS_API CExtDynAutoHideSlider
  690. : public CWnd
  691. , CExtPmBridge
  692. {
  693. protected:
  694. HWND m_hWndAnimateSrc, m_hWndBar;
  695. public:
  696. CExtDynAutoHideArea * _GetWndAnimateSrc();
  697. CExtControlBar * _GetBar();
  698. protected:
  699. //CExtDynAutoHideArea * m_pWndAnimateSrc;
  700. //CExtControlBar * m_pBar;
  701. CSize m_sizeControlBar;
  702. bool m_bActiveState:1;
  703. bool m_bWndActive:1;
  704. bool m_bDeactivateTesting:1;
  705. bool m_bAnimation:1;
  706. UINT m_nResizingMode;
  707. INT m_nResizingStart, m_nResizingMetric;
  708. CExtBarNcAreaButton
  709. * m_pLastHitTestM,
  710. * m_pLastHitTestT,
  711. * m_pLastHitTestB;
  712. CToolTipCtrl m_wndToolTip;
  713. CRect m_rcMax;
  714. void _AnalyzeButtonsHover();
  715. static HHOOK g_hMouseHook;
  716. static HHOOK g_hKeyboardHook;
  717. static CExtDynAutoHideSlider * g_pHookTarget;
  718. static LRESULT CALLBACK _HookMouseProc(
  719. int nCode,      // hook code
  720. WPARAM wParam,  // message identifier
  721. LPARAM lParam   // mouse coordinates
  722. );
  723. static LRESULT CALLBACK _HookKeyboardProc(
  724. int nCode,      // hook code
  725. WPARAM wParam,  // virtual-key code
  726. LPARAM lParam   // keystroke-message information
  727. );
  728. bool _HookMouseClick(
  729. UINT nMkCode,
  730. bool bDown,
  731. bool bNcArea,
  732. CPoint ptScreen
  733. );
  734. bool _HookMouseMove(
  735. bool bNcArea,
  736. CPoint ptScreen
  737. );
  738. bool _HookKeyEvent(
  739. UINT nChar,
  740. UINT nRepCnt,
  741. UINT nFlags
  742. );
  743. public:
  744. CExtDynAutoHideSlider();
  745. virtual ~CExtDynAutoHideSlider();
  746. DECLARE_DYNCREATE( CExtDynAutoHideSlider );
  747. DECLARE_CExtPmBridge_MEMBERS( CExtDynAutoHideSlider );
  748. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  749. virtual void OnCustomizeModeEnter(
  750. CExtDynAutoHideArea * pWndAutoHideArea
  751. );
  752. virtual void OnCustomizeModeLeave(
  753. CExtDynAutoHideArea * pWndAutoHideArea
  754. );
  755. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  756. #ifdef _DEBUG
  757. virtual void AssertValid() const
  758. {
  759. CWnd::AssertValid();
  760. }
  761. virtual void Dump( CDumpContext & dc ) const
  762. {
  763. CWnd::Dump( dc );
  764. }
  765. #endif
  766. CExtControlBar * GetBar();
  767. const CExtControlBar * GetBar() const;
  768. static bool RegisterAutohideSliderWndClass();
  769. virtual BOOL Create(
  770. CFrameWnd * pParentWnd
  771. );
  772. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  773. void Activate(
  774. CExtControlBar * pBar,
  775. bool bActivate,
  776. bool bAnimate,
  777. bool bWait
  778. );
  779. void CalcInnerNcRects(
  780. RECT * pRcInnerArea,
  781. RECT * pRcDrawResizer,
  782. RECT * pRcDrawGripper
  783. );
  784. void CalcNcOffsets(
  785. RECT * pRcNcSizes
  786. );
  787. // for command hit testing (used for automatic tooltips)
  788. virtual __EXT_MFC_INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  789. virtual CExtPopupMenuTipWnd * OnAdvancedPopupMenuTipWndGet() const;
  790. public:
  791. // Overrides
  792. // ClassWizard generated virtual function overrides
  793. //{{AFX_VIRTUAL(CExtDynAutoHideSlider)
  794. public:
  795. virtual BOOL PreTranslateMessage(MSG* pMsg);
  796. virtual BOOL DestroyWindow();
  797. protected:
  798. virtual void PostNcDestroy();
  799. //}}AFX_VIRTUAL
  800. //{{AFX_MSG(CExtDynAutoHideSlider)
  801. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  802. afx_msg void OnPaint();
  803. afx_msg UINT OnNcHitTest(CPoint point);
  804. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  805. afx_msg void OnNcPaint();
  806. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  807. afx_msg void OnCancelMode();
  808. afx_msg void OnClose();
  809. afx_msg void OnDestroy();
  810. afx_msg void OnTimer(__EXT_MFC_UINT_PTR nIDEvent);
  811. afx_msg void OnSetFocus(CWnd* pOldWnd);
  812. afx_msg void OnSize(UINT nType, int cx, int cy);
  813. //}}AFX_MSG
  814. afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
  815. DECLARE_MESSAGE_MAP()
  816. friend class CExtDynAutoHideArea;
  817. friend class CExtDynAutoHideArea::CDynDropTarget;
  818. friend class CExtControlBar;
  819. friend class CExtBarNcAreaButton;
  820. }; // class CExtDynAutoHideSlider
  821. #define __AUTOHIDE_SLIDER_WNDCLASS _T("ProfUIS-AutohideSlider")
  822. #if (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  823. class CExtDynamicBarSite;
  824. class CExtDynamicBarNcAreaButtonMenu;
  825. /////////////////////////////////////////////////////////////////////////////
  826. // CExtDynamicTabbedControlBar
  827. class __PROF_UIS_API CExtDynamicTabbedControlBar : public CExtDynTabControlBar
  828. {
  829. CExtDynamicBarSite * m_pDBS;
  830. public:
  831. DECLARE_DYNCREATE( CExtDynamicTabbedControlBar );
  832. CExtDynamicTabbedControlBar();
  833. virtual ~CExtDynamicTabbedControlBar();
  834. CExtDynamicBarSite * GetBarSite();
  835. virtual void OnNcAreaButtonsReinitialize();
  836. protected:
  837. virtual bool _CanDockToTabbedContainers(
  838. CExtControlBar * pDestBar
  839. ) const;
  840. virtual bool _CanDockLTRB(
  841. CExtControlBar * pDestBar
  842. ) const;
  843. friend class CExtDynamicBarNcAreaButtonMenu;
  844. }; // class CExtDynamicTabbedControlBar
  845. #endif // (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  846. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  847. #endif // __EXT_CONTROLBAR_TABBED_FEATURES_H