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

界面编程

开发平台:

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_H)
  22. #define __EXT_CONTROLBAR_H
  23. //
  24. // Many thanks to Paul DiLascia & Cristi Posea, their works
  25. // were a powerful incentive to learn more about pretty
  26. // complicated MFC docking windows mechanism
  27. //
  28. #if _MSC_VER > 1000
  29. #pragma once
  30. #endif // _MSC_VER > 1000
  31. //#if (!defined __AFXMT_H__)
  32. // #include <AfxMT.h>
  33. //#endif
  34. #if (!defined __AFXTEMPL_H__)
  35. #include <AfxTempl.h>
  36. #endif
  37. #if (!defined __EXT_MOUSECAPTURESINK_H)
  38. #include <../Src/ExtMouseCaptureSink.h>
  39. #endif
  40. #if (!defined __EXT_CMD_ICON_H)
  41. #include <ExtCmdIcon.h>
  42. #endif
  43. #if (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  44. #if (!defined __EXT_HOOK_H)
  45. #include <../Src/ExtHook.h>
  46. #endif
  47. #endif // (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  48. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  49. #if (!defined __EXTCUSTOMIZE_H)
  50. #include <ExtCustomize.h>
  51. #endif
  52. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  53. #if (!defined __EXT_HOOK_H)
  54. #include <../Src/ExtHook.h>
  55. #endif
  56. #define __EXT_TB_BUTTON_SEPARATOR_WIDTH 6
  57. #define __EXT_TB_BUTTON_SEPARATOR_HEIGHT 6
  58. #define __EXT_TB_BUTTON_TEXT_MARGIN 3 // 5
  59. #define __EXT_TB_BUTTON_INNER_MARGIN 0 // 1
  60. #define __EXT_TB_BUTTON_OUTER_MARGIN 3
  61. #define __EXT_TB_ROW_DISTANCE 6
  62. class CDockBar;
  63. class CExtDockBar;
  64. class CExtDockOuterBar;
  65. class CExtMiniDockFrameWnd;
  66. class CExtPopupMenuWnd;
  67. class CExtPopupMenuTipWnd;
  68. class CExtControlBar;
  69. class CExtToolControlBar;
  70. class CExtMenuControlBar;
  71. class CExtBarButton;
  72. class CExtBarContentExpandButton;
  73. class CExtBarMdiDocButton;
  74. class CExtControlBar;
  75. class CExtDynControlBar;
  76. class CExtDockDynBar;
  77. class CExtDynDockMarkerWnd;
  78. class CExtDynDockHighlightWnd;
  79. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  80. class CExtDockDynTabBar;
  81. class CExtDynTabWnd;
  82. class CExtDynTabControlBar;
  83. class CExtDynAutoHideArea;
  84. class CExtDynAutoHideSlider;
  85. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  86. typedef
  87. CArray < CExtControlBar*, CExtControlBar* >
  88. ExtControlBarVector_t;
  89. typedef
  90. CArray < CControlBar*, CControlBar* >
  91. MfcControlBarVector_t;
  92. class CExtAnimationClient;
  93. class CExtAnimationSite;
  94. /////////////////////////////////////////////////////////////////////////////
  95. // CExtAnimationParameters
  96. #define __EXT_MFC_DEF_ANIMATION_STEP_COUNT    5
  97. #define __EXT_MFC_DEF_ANIMATION_STEP_COUNT_MAX  255
  98. #define __EXT_MFC_DEF_ANIMATION_TIMER_ELAPSE   40
  99. #define __EXT_MFC_DEF_ANIMATION_TIMER_INVALID_ID    0
  100. #define __EXT_MFC_DEF_ANIMATION_TIMER_BASE_TIMER_ID 8700
  101. #define __EXT_MFC_DEF_ANIMATION_TIMER_MAX_TIMER_ID ( __EXT_MFC_DEF_ANIMATION_TIMER_BASE_TIMER_ID + 1000 - 1 )
  102. #define __EAPT_BY_HOVERED_STATE_TURNED_ON 0
  103. #define __EAPT_BY_HOVERED_STATE_TURNED_OFF 1
  104. #define __EAPT_BY_PRESSED_STATE_TURNED_ON 2
  105. #define __EAPT_BY_PRESSED_STATE_TURNED_OFF 3
  106. #define __EAPT_BY_SELECTED_STATE_TURNED_ON 4
  107. #define __EAPT_BY_SELECTED_STATE_TURNED_OFF 5
  108. class CExtAnimationParameters
  109. {
  110. protected:
  111. INT m_nAcStepCount;
  112. UINT m_nAcTimerElapse;
  113. public:
  114. CExtAnimationParameters(
  115. INT nAcStepCount = __EXT_MFC_DEF_ANIMATION_STEP_COUNT,
  116. UINT nAcTimerElapse = __EXT_MFC_DEF_ANIMATION_TIMER_ELAPSE
  117. );
  118. virtual ~CExtAnimationParameters();
  119. virtual INT AnimationClient_StepCountGet() const;
  120. virtual void AnimationClient_StepCountSet( INT nAcStepCount );
  121. virtual UINT AnimationClient_TimerElapseGet() const;
  122. virtual void AnimationClient_TimerElapseSet( UINT nAcTimerElapse );
  123. };
  124. /////////////////////////////////////////////////////////////////////////////
  125. // CExtAnimationClient
  126. class __PROF_UIS_API CExtAnimationClient
  127. {
  128. protected:
  129. CExtAnimationSite * m_pAcAS;
  130. CExtBitmap m_bmpAcStatePrev, m_bmpAcStateNext;
  131. INT m_nAcStepNumber, m_nAcStepCount;
  132. UINT m_nAcTimerElapse;
  133. bool m_bAcEnabled:1, m_bAcNonClientMode:1;
  134. CRect m_rcAcTarget;
  135. INT m_nAcCacheGeneratorLock;
  136. INT m_eAPT_Last;
  137. public:
  138. CExtAnimationClient(
  139. CExtAnimationSite * pAcAS = NULL,
  140. bool bAcEnabled = true,
  141. bool bAcNonClientMode = false,
  142. INT nAcStepNumber = 0,
  143. INT nAcStepCount = __EXT_MFC_DEF_ANIMATION_STEP_COUNT,
  144. UINT nAcTimerElapse = __EXT_MFC_DEF_ANIMATION_TIMER_ELAPSE,
  145. const RECT * pAcRcAnimationTarget = NULL
  146. );
  147. virtual ~CExtAnimationClient();
  148. virtual void AnimationClient_CacheGeneratorLock();
  149. virtual void AnimationClient_CacheGeneratorUnlock();
  150. virtual bool AnimationClient_CacheGeneratorIsLocked() const;
  151. virtual CExtAnimationSite * AnimationClient_SiteGet();
  152. const CExtAnimationSite * AnimationClient_SiteGet() const;
  153. virtual void AnimationClient_SiteSet(
  154. CExtAnimationSite * pAcAS = NULL
  155. );
  156. virtual CExtBitmap & AnimationClient_StateGet( bool bAcNext );
  157. const CExtBitmap & AnimationClient_StateGet( bool bAcNext ) const;
  158. virtual bool AnimationClient_IsEmpty() const;
  159. virtual void AnimationClient_Empty();
  160. virtual INT AnimationClient_StepNumberGet() const;
  161. virtual void AnimationClient_StepNumberSet( INT nAcStepNumber );
  162. virtual INT AnimationClient_StepCountGet() const;
  163. virtual void AnimationClient_StepCountSet( INT nAcStepCount );
  164. virtual UINT AnimationClient_TimerElapseGet() const;
  165. virtual void AnimationClient_TimerElapseSet( UINT nAcTimerElapse );
  166. virtual bool AnimationClient_NonClientModeGet() const;
  167. virtual void AnimationClient_NonClientModeSet(
  168. bool bAcNonClientMode = false
  169. );
  170. virtual bool AnimationClient_EnabledGet() const;
  171. virtual void AnimationClient_EnabledSet(
  172. bool bAcEnabled = true
  173. );
  174. virtual bool AnimationClient_OnQueryEnabledState(
  175. INT eAPT // __EAPT_*** animation type
  176. ) const;
  177. virtual CRect AnimationClient_TargetRectGet() const;
  178. virtual void AnimationClient_TargetRectSet(
  179. const RECT & rcAcAnimationTarget
  180. );
  181. virtual bool AnimationClient_CacheNextState(
  182. CDC & dc,
  183. const RECT & rcAcAnimationTarget,
  184. bool bAnimate,
  185. INT eAPT // __EAPT_*** animation type
  186. );
  187. bool AnimationClient_CacheNextState(
  188. HWND hWnd,
  189. const RECT & rcAcAnimationTarget,
  190. bool bAnimate,
  191. INT eAPT // __EAPT_*** animation type
  192. );
  193. bool AnimationClient_CacheNextStateMinInfo(
  194. bool bAnimate,
  195. INT eAPT // __EAPT_*** animation type
  196. );
  197. virtual void AnimationClient_NextStatePrepare(
  198. CDC & dc,
  199. const RECT & rcAcAnimationTarget,
  200. bool bAnimate,
  201. INT eAPT // __EAPT_*** animation type
  202. );
  203. virtual void AnimationClient_NextStateAdjust(
  204. CExtBitmap & _bmp
  205. );
  206. virtual void AnimationClient_StateDoStep();
  207. virtual bool AnimationClient_StatePaint(
  208. CDC & dc
  209. );
  210. bool AnimationClient_StatePaint(
  211. HWND hWnd
  212. );
  213. bool AnimationClient_StatePaint();
  214. virtual void AnimationClient_OnProgressStart(
  215. INT eAPT // __EAPT_*** animation type
  216. );
  217. virtual void AnimationClient_OnProgressStop(
  218. INT eAPT // __EAPT_*** animation type
  219. );
  220. virtual INT AnimationClient_OnStepCountGet(
  221. INT eAPT // __EAPT_*** animation type
  222. ) const;
  223. virtual UINT AnimationClient_OnTimerElapseGet(
  224. INT eAPT // __EAPT_*** animation type
  225. ) const;
  226. virtual const CExtAnimationParameters *
  227. AnimationClient_OnQueryAnimationParameters(
  228. INT eAPT // __EAPT_*** animation type
  229. ) const;
  230. virtual INT AnimationClient_LastAnimationTypeGet() const;
  231. virtual void AnimationClient_LastAnimationTypeSet(
  232. INT eAPT // __EAPT_*** animation type
  233. );
  234. }; // class CExtAnimationClient
  235. /////////////////////////////////////////////////////////////////////////////
  236. // CExtAnimationSite
  237. class __PROF_UIS_API CExtAnimationSite
  238. : public CExtPmBridge
  239. {
  240. protected:
  241. CTypedPtrArray < CPtrArray, CExtAnimationClient * > m_arrAsAnimationClients;
  242. CTypedPtrMap < CMapPtrToWord, CExtAnimationClient *, WORD > m_mapAsAnimationClients;
  243. CMap < WORD, WORD, WORD, WORD > m_mapAsAnimationTimers; // key = nElapse, value = timer ID
  244. bool m_bAsEnabled:1;
  245. public:
  246. DECLARE_CExtPmBridge_MEMBERS_GENERIC( CExtAnimationSite );
  247. CExtAnimationSite(
  248. bool bAsEnabled = true
  249. );
  250. virtual ~CExtAnimationSite();
  251. virtual bool AnimationSite_EnabledGet() const;
  252. virtual void AnimationSite_EnabledSet(
  253. bool bAsEnabled = true
  254. );
  255. virtual bool AnimationSite_OnQueryEnabledState() const;
  256. virtual INT AnimationSite_ClientGetCount(
  257. bool bAsIncludeClientArea = true,
  258. bool bAsIncludeNonClientArea = true
  259. ) const;
  260. virtual CExtAnimationClient * AnimationSite_ClientGetAt( INT nAcIndex );
  261. const CExtAnimationClient * AnimationSite_ClientGetAt( INT nAcIndex ) const;
  262. virtual bool AnimationSite_ClientInsertAt( INT nAcIndex, CExtAnimationClient * pAC );
  263. bool AnimationSite_ClientAdd( CExtAnimationClient * pAC );
  264. virtual INT AnimationSite_ClientGetIndexOf( const CExtAnimationClient * pAC ) const;
  265. virtual INT AnimationSite_ClientRemove(
  266. INT nAcIndex = 0,
  267. INT nAcCount = -1,
  268. bool bDelete = false
  269. );
  270. bool AnimationSite_ClientRemove(
  271. CExtAnimationClient * pAC,
  272. bool bDelete = false
  273. );
  274. virtual HWND AnimationSite_GetSafeHWND() const = 0;
  275. virtual WORD AnimationSite_TimerGetBaseID();
  276. virtual WORD AnimationSite_TimerGetMaxID();
  277. virtual bool AnimationSite_ClientProgressStart(
  278. CExtAnimationClient * pAC,
  279. INT eAPT // __EAPT_*** animation type
  280. );
  281. virtual void AnimationSite_ClientProgressStop(
  282. CExtAnimationClient * pAC
  283. );
  284. protected:
  285. class __PROF_UIS_API AnimationHookSink : public CExtHookSink
  286. {
  287. bool m_bHookEnabled:1;
  288. CExtAnimationSite * m_pAS;
  289. public:
  290. AnimationHookSink(
  291. CExtAnimationSite * pAS = NULL
  292. );
  293. virtual ~AnimationHookSink();
  294. CExtAnimationSite * AnimationSiteGet();
  295. const CExtAnimationSite * AnimationSiteGet() const;
  296. void AnimationSiteSet( CExtAnimationSite * pAS, bool bHookEnabled );
  297. bool AnimationInit( bool bHookEnabled );
  298. void AnimationDone();
  299. protected:
  300. virtual bool OnHookWndMsg(
  301. LRESULT & lResult,
  302. HWND hWndHooked,
  303. UINT nMessage,
  304. WPARAM & wParam,
  305. LPARAM & lParam
  306. );
  307. friend class CExtAnimationSite;
  308. }; // class AnimationHookSink
  309. friend class AnimationHookSink;
  310. AnimationHookSink m_AcHS;
  311. virtual bool AnimationSite_OnHookWndMsg(
  312. LRESULT & lResult,
  313. HWND hWndHooked,
  314. UINT nMessage,
  315. WPARAM & wParam,
  316. LPARAM & lParam
  317. );
  318. public:
  319. virtual bool AnimationSite_OnHookTimer(
  320. UINT nTimerID
  321. );
  322. virtual void AnimationSite_OnAnimationHookInit();
  323. virtual void AnimationSite_OnAnimationHookDone();
  324. virtual bool AnimationSite_Init( bool bHookEnabled );
  325. virtual void AnimationSite_Done();
  326. virtual void AnimationSite_OnClientStateChanged(
  327. CExtAnimationClient * pAC,
  328. INT eAPT // __EAPT_*** animation type
  329. );
  330. virtual void AnimationSite_PassAnimationEvents();
  331. virtual void AnimationSite_OnProgressShutdownTimer( UINT nTimerID );
  332. virtual HWND PmBridge_GetSafeHwnd() const;
  333. virtual void PmBridge_OnPaintManagerChanged(
  334. CExtPaintManager * pGlobalPM
  335. );
  336. }; // class CExtAnimationSite
  337. /////////////////////////////////////////////////////////////////////////////
  338. // CExtAnimationSingleton
  339. class __PROF_UIS_API CExtAnimationSingleton
  340. : public CExtAnimationSite
  341. , public CExtAnimationClient
  342. {
  343. public:
  344. CExtAnimationSingleton(
  345. bool bAsEnabled = true,
  346. INT nAcStepNumber = 0,
  347. INT nAcStepCount = __EXT_MFC_DEF_ANIMATION_STEP_COUNT,
  348. UINT nAcTimerElapse = __EXT_MFC_DEF_ANIMATION_TIMER_ELAPSE,
  349. const RECT * pAcRcAnimationTarget = NULL
  350. );
  351. virtual ~CExtAnimationSingleton();
  352. }; // class CExtAnimationSingleton
  353. /////////////////////////////////////////////////////////////////////////////
  354. // CExtBarNcAreaButton
  355. class __PROF_UIS_API CExtBarNcAreaButton : public CObject
  356. {
  357. protected:
  358. CExtControlBar * m_pBar;
  359. CRect m_rc;
  360. bool m_bHover:1, m_bPushed:1, m_bDisabled:1,
  361. m_bPaintingCombinedArea:1;
  362. public:
  363. DECLARE_DYNCREATE( CExtBarNcAreaButton );
  364. CExtBarNcAreaButton(
  365. CExtControlBar * pBar = NULL
  366. );
  367. virtual ~CExtBarNcAreaButton();
  368. virtual void OnNcDestroy();
  369. const CRect & RectGet() const
  370. {
  371. ASSERT_VALID( this );
  372. return m_rc;
  373. }
  374. CRect & RectGet()
  375. {
  376. ASSERT_VALID( this );
  377. return m_rc;
  378. }
  379. void RectSet( const RECT & rc )
  380. {
  381. ASSERT_VALID( this );
  382. m_rc = rc;
  383. }
  384. operator CSize() const
  385. {
  386. ASSERT_VALID( this );
  387. return m_rc.Size();
  388. }
  389. operator const CRect & () const
  390. {
  391. ASSERT_VALID( this );
  392. return m_rc;
  393. }
  394. operator CRect & ()
  395. {
  396. ASSERT_VALID( this );
  397. return m_rc;
  398. }
  399. bool HoverGet() const
  400. {
  401. ASSERT_VALID( this );
  402. return m_bHover;
  403. }
  404. void HoverSet( bool bSet )
  405. {
  406. ASSERT_VALID( this );
  407. m_bHover = bSet;
  408. }
  409. bool PushedGet() const
  410. {
  411. ASSERT_VALID( this );
  412. return m_bPushed;
  413. }
  414. void PushedSet( bool bSet )
  415. {
  416. ASSERT_VALID( this );
  417. m_bPushed = bSet;
  418. }
  419. bool DisabledGet() const
  420. {
  421. ASSERT_VALID( this );
  422. return m_bDisabled;
  423. }
  424. void DisabledSet( bool bSet )
  425. {
  426. ASSERT_VALID( this );
  427. m_bDisabled = bSet;
  428. }
  429. bool PaintingCombinedAreaGet() const
  430. {
  431. ASSERT_VALID( this );
  432. return m_bPaintingCombinedArea;
  433. }
  434. void PaintingCombinedAreaSet( bool bSet )
  435. {
  436. ASSERT_VALID( this );
  437. m_bPaintingCombinedArea = bSet;
  438. }
  439. bool IsBarFixedMode() const;
  440. bool IsBarVisible() const;
  441. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  442. virtual bool OnQueryDeactivateAutohideSlider() const;
  443. bool IsBarAutoHideMode(
  444. bool * p_bDisplayed = NULL,
  445. bool * p_bActive = NULL
  446. ) const;
  447. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  448. bool IsBarFloated() const;
  449. bool IsBarDocked() const;
  450. bool IsBarDockedHorizontally() const;
  451. bool IsBarDockedVertically() const;
  452. bool IsBarDockedAtLeft() const;
  453. bool IsBarDockedAtRight() const;
  454. bool IsBarDockedAtTop() const;
  455. bool IsBarDockedAtBottom() const;
  456. bool GetBarNcAreaInfo( // returns false if no nc area on bar
  457. LPRECT pRectGripper = NULL, // in window coords
  458. LPRECT pRectWnd = NULL, // in screen coords
  459. bool * pbGripperAtTop = NULL,
  460. bool * pbTextOnGripper = NULL
  461. ) const;
  462. bool IsBarWndActive() const;
  463. bool IsBarSingleOnRow() const;
  464. bool IsBarMinimizedOnRow() const;
  465. bool IsBarMaximizedOnRow() const;
  466. bool IsBarFirstOnRow( bool bExtBar ) const;
  467. bool IsBarLastOnRow( bool bExtBar ) const;
  468. CFrameWnd * GetDockingFrame();
  469. CExtControlBar * GetBar()
  470. {
  471. ASSERT_VALID( this );
  472. return m_pBar;
  473. }
  474. const CExtControlBar * GetBar() const
  475. {
  476. ASSERT_VALID( this );
  477. return m_pBar;
  478. }
  479. virtual void OnNcAreaReposition(
  480. CExtBarNcAreaButton * pPrevBtn
  481. );
  482. virtual bool OnQueryVisibility() const;
  483. void NcDrawDefault(
  484. CDC & dc,
  485. int nDockBtnGlyptT
  486. );
  487. virtual void OnNcAreaDraw( CDC & dc );
  488. virtual UINT OnNcAreaHitTest( CPoint point );
  489. virtual HCURSOR OnNcAreaQueryCursor( CPoint point );
  490. virtual bool OnNcAreaClicked( CPoint point );
  491. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  492. CPoint point,
  493. TOOLINFO * pTI
  494. );
  495. __EXT_MFC_INT_PTR DoDefaultReflectForToolHitTest(
  496. TOOLINFO * pTI,
  497. UINT nIdResourceTooltipText,
  498. __EXT_MFC_SAFE_LPCTSTR sTooltipTextDefault
  499. );
  500. __EXT_MFC_INT_PTR DoDefaultReflectForToolHitTest(
  501. TOOLINFO * pTI,
  502. __EXT_MFC_SAFE_LPCTSTR sTooltipText
  503. );
  504. #ifdef _DEBUG
  505. virtual void AssertValid() const
  506. {
  507. ASSERT( m_pBar != NULL );
  508. CObject::AssertValid();
  509. }
  510. virtual void Dump( CDumpContext & dc ) const
  511. {
  512. CObject::Dump( dc );
  513. }
  514. #endif
  515. friend class CExtControlBar;
  516. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  517. friend class CExtDynAutoHideSlider;
  518. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  519. }; // class CExtBarNcAreaButton
  520. /////////////////////////////////////////////////////////////////////
  521. // CExtBarNcAreaButtonFloatingMaximizeRestore
  522. //
  523. //class __PROF_UIS_API CExtBarNcAreaButtonFloatingMaximizeRestore : public CExtBarNcAreaButton
  524. //{
  525. //public:
  526. //
  527. // DECLARE_DYNCREATE( CExtBarNcAreaButtonFloatingMaximizeRestore );
  528. //
  529. // CExtBarNcAreaButtonFloatingMaximizeRestore(
  530. // CExtControlBar * pBar = NULL
  531. // );
  532. //
  533. // virtual bool OnQueryVisibility() const;
  534. // virtual void OnNcAreaDraw( CDC & dc );
  535. // virtual UINT OnNcAreaHitTest( CPoint point );
  536. // virtual bool OnNcAreaClicked( CPoint point );
  537. //
  538. // virtual __EXT_MFC_INT_PTR OnToolHitTest(
  539. // CPoint point,
  540. // TOOLINFO * pTI
  541. // );
  542. //
  543. // static bool stat_IsBarInFloatingMaximizedState(
  544. // const CExtControlBar * pBar
  545. // );
  546. // virtual bool IsBarInFloatingMaximizedState() const;
  547. //
  548. //}; // class CExtBarNcAreaButtonFloatingMaximizeRestore
  549. /////////////////////////////////////////////////////////////////////////////
  550. // CExtBarNcAreaButtonExpand
  551. class __PROF_UIS_API CExtBarNcAreaButtonExpand : public CExtBarNcAreaButton
  552. {
  553. public:
  554. DECLARE_DYNCREATE( CExtBarNcAreaButtonExpand );
  555. CExtBarNcAreaButtonExpand(
  556. CExtControlBar * pBar = NULL
  557. );
  558. virtual bool OnQueryVisibility() const;
  559. virtual void OnNcAreaDraw( CDC & dc );
  560. virtual UINT OnNcAreaHitTest( CPoint point );
  561. virtual bool OnNcAreaClicked( CPoint point );
  562. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  563. CPoint point,
  564. TOOLINFO * pTI
  565. );
  566. }; // class CExtBarNcAreaButtonExpand
  567. /////////////////////////////////////////////////////////////////////////////
  568. // CExtBarNcAreaButtonMenu
  569. class __PROF_UIS_API CExtBarNcAreaButtonMenu : public CExtBarNcAreaButton
  570. {
  571. public:
  572. DECLARE_DYNCREATE( CExtBarNcAreaButtonMenu );
  573. CExtBarNcAreaButtonMenu(
  574. CExtControlBar * pBar = NULL
  575. );
  576. static void _CbPaintCombinedContent(
  577. LPVOID pCookie,
  578. CDC & dc,
  579. const CWnd & refWndMenu,
  580. const CRect & rcExcludeArea, // in screen coords
  581. int eCombineAlign // CExtPopupMenuWnd::e_combine_align_t values
  582. );
  583. virtual bool OnQueryVisibility() const;
  584. virtual void OnNcAreaDraw( CDC & dc );
  585. virtual UINT OnNcAreaHitTest( CPoint point );
  586. virtual bool OnNcAreaClicked( CPoint point );
  587. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  588. CPoint point,
  589. TOOLINFO * pTI
  590. );
  591. }; // class CExtBarNcAreaButtonMenu
  592. /////////////////////////////////////////////////////////////////////////////
  593. // CExtBarNcAreaButtonClose
  594. class __PROF_UIS_API CExtBarNcAreaButtonClose : public CExtBarNcAreaButton
  595. {
  596. public:
  597. DECLARE_DYNCREATE( CExtBarNcAreaButtonClose );
  598. CExtBarNcAreaButtonClose(
  599. CExtControlBar * pBar = NULL
  600. );
  601. virtual bool OnQueryVisibility() const;
  602. virtual void OnNcAreaDraw( CDC & dc );
  603. virtual UINT OnNcAreaHitTest( CPoint point );
  604. virtual bool OnNcAreaClicked( CPoint point );
  605. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  606. CPoint point,
  607. TOOLINFO * pTI
  608. );
  609. }; // class CExtBarNcAreaButtonClose
  610. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  611. /////////////////////////////////////////////////////////////////////////////
  612. // CExtBarNcAreaButtonAutoHide
  613. class __PROF_UIS_API CExtBarNcAreaButtonAutoHide : public CExtBarNcAreaButton
  614. {
  615. public:
  616. DECLARE_DYNCREATE( CExtBarNcAreaButtonAutoHide );
  617. CExtBarNcAreaButtonAutoHide(
  618. CExtControlBar * pBar = NULL
  619. );
  620. virtual bool OnQueryVisibility() const;
  621. virtual void OnNcAreaDraw( CDC & dc );
  622. virtual UINT OnNcAreaHitTest( CPoint point );
  623. virtual bool OnNcAreaClicked( CPoint point );
  624. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  625. CPoint point,
  626. TOOLINFO * pTI
  627. );
  628. virtual void OnNcAreaReposition(
  629. CExtBarNcAreaButton * pPrevBtn
  630. );
  631. }; // class CExtBarNcAreaButtonAutoHide
  632. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  633. class CExtCustomizeToolbarsListBox;
  634. /////////////////////////////////////////////////////////////////////////////
  635. // CExtControlBar window
  636. class __PROF_UIS_API CExtControlBar
  637. : public CControlBar
  638. , public CExtMouseCaptureSink
  639. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  640. , public CExtCustomizeSite::ICustomizeDropTarget
  641. , public CExtCustomizeSite::ICustomizeDropSource
  642. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  643. , public CExtAnimationSite
  644. {
  645. struct __PROF_UIS_API InternalDockBarInfo_t
  646. {
  647. CMap < UINT, UINT, DWORD, DWORD > m_mapDockBarInfo;
  648. InternalDockBarInfo_t();
  649. DWORD operator [] ( UINT nDockBarID );
  650. bool ReplaceFrameDockBar(
  651. UINT nDockBarID,
  652. DWORD dwDockStyle,
  653. CFrameWnd * pFrame
  654. );
  655. }; // struct InternalDockBarInfo_t
  656. static InternalDockBarInfo_t g_DockBarInfo;
  657. public:
  658. class __PROF_UIS_API InternalAffixmentData
  659. {
  660. void _AssignFromOther(
  661. const InternalAffixmentData & other
  662. );
  663. public:
  664. UINT m_nAffixmentWeight;
  665. CRect m_rcAffixment;
  666. CSize m_sizeCompressed;
  667. DWORD m_dwAffixmentFlags;
  668. enum e_affixment_flags
  669. {
  670. __EAFF_FIXED_MODE_INITIAL_RECALC = 0x00000001L
  671. };
  672. InternalAffixmentData();
  673. InternalAffixmentData(
  674. const InternalAffixmentData & other
  675. );
  676. ~InternalAffixmentData();
  677. bool IsEmpty() const;
  678. void Empty();
  679. bool operator ! ()
  680. {
  681. return (! IsEmpty() );
  682. }
  683. InternalAffixmentData & operator = (
  684. const InternalAffixmentData & other
  685. )
  686. {
  687. _AssignFromOther( other );
  688. return *this;
  689. }
  690. int CompareAffixment(
  691. const InternalAffixmentData & other
  692. ) const;
  693. void Serialize( CArchive & ar );
  694. }; // class InternalAffixmentData
  695. class __PROF_UIS_API InternalDockStateBar : public CObject
  696. {
  697. public:
  698. UINT m_nBarID, m_nDockBarID, m_nCircleNo, m_nMRUWidth;
  699. DWORD m_dwBarFlags, m_dwDockStateFlags, m_dwMRUFloatStyle,
  700. m_dwFloatingFrameCreateStyle;
  701. LONG m_nDelayedRowUpdateMetric;
  702. CPoint m_ptFloatPos, m_ptMRUFloatPos;
  703. CRect m_rcMRUDockPos, m_rcFloatingFrame, m_rcBar;
  704. CSize m_sizeDockedH, m_sizeDockedV, m_sizeFloated;
  705. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  706. INT m_nAutoHideWidth, m_nAutoHideHeight;
  707. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  708. CArray <
  709. InternalDockStateBar *,
  710. InternalDockStateBar *
  711. > m_arrChildStates;
  712. LONG m_nHelperAciveTabChildIndex; 
  713. CExtControlBar * m_pHelperBar;
  714. // m_dwDockStateFlags values
  715. enum
  716. {
  717. __DOCK_AT_NOWHERE = 0x00000000,
  718. __DOCK_AT_SIDE = 0x00000001,
  719. __DOCK_DYNAMIC_HALF_SPLIT = 0x00000002,
  720. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  721. __DOCK_DYNAMIC_TABBED = 0x00000003,
  722. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  723. __DOCK_AT_MASK = 0x0000000F,
  724. __STATE_VISIBLE = 0x00000010,
  725. __STATE_FLOATING = 0x00000020,
  726. __STATE_NEW_ROW = 0x00000040,
  727. __STATE_DYNAMIC_CHILD = 0x00000080,
  728. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  729. __STATE_TAB_CHILD = 0x00000100,
  730. __STATE_TAB_ACTIVE = 0x00000200,
  731. __STATE_AUTOHIDDEN = 0x00000400,
  732. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  733. };
  734. InternalDockStateBar();
  735. ~InternalDockStateBar();
  736. void InitMembers();
  737. virtual void Serialize( CArchive & ar );
  738. void Clear();
  739. void StateGet(
  740. CExtControlBar * pBar,
  741. InternalDockStateBar * pParentState
  742. );
  743. void StateSet(
  744. CFrameWnd * pDockSite,
  745. InternalDockStateBar * pParentState
  746. );
  747. void PreSyncAttributes(
  748. CFrameWnd * pDockSite,
  749. InternalDockStateBar * pParentState
  750. );
  751. void PostSyncAttributes(
  752. CFrameWnd * pDockSite,
  753. InternalDockStateBar * pParentState
  754. );
  755. }; // class InternalDockStateBar
  756. struct __PROF_UIS_API OuterItemData_t
  757. {
  758. UINT m_nBarID;
  759. CPoint m_ptFloatHelper;
  760. CSize m_sizeDockedH, m_sizeDockedV, m_sizeFloated;
  761. InternalAffixmentData m_AffixmentData;
  762. bool m_bFloating:1, m_bVisible:1;
  763. OuterItemData_t();
  764. OuterItemData_t(
  765. const OuterItemData_t & other
  766. );
  767. OuterItemData_t & operator = (
  768. const OuterItemData_t & other
  769. );
  770. void Serialize( CArchive & ar );
  771. }; // struct OuterItemData_t
  772. typedef
  773. CArray < OuterItemData_t, OuterItemData_t & >
  774. OuterPropsArr_t;
  775. class __PROF_UIS_API InternalDockStateSite : public CObject
  776. {
  777. public:
  778. OuterPropsArr_t m_arrOuterProps;
  779. CFrameWnd * m_pDockSite;
  780. WINDOWPLACEMENT m_wp;
  781. CDockState * m_pOuterState;
  782. bool m_bSerializeFixedBarsState:1,
  783. m_bSerializeResizableBarsState:1;
  784. CArray <
  785. InternalDockStateBar *,
  786. InternalDockStateBar *
  787. > m_arrBarStates;
  788. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  789. CArray < UINT, UINT > m_arrAutoHideOrder;
  790. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  791. InternalDockStateSite(
  792. CFrameWnd * pDockSite,
  793. bool bSerializeFixedBarsState = true,
  794. bool bSerializeResizableBarsState = true
  795. );
  796. ~InternalDockStateSite();
  797. virtual void Serialize( CArchive & ar );
  798. void Clear();
  799. void StateGet();
  800. void StateSet( bool bPresetWP ) const;
  801. InternalDockStateBar * AppendFloatingLayout(
  802. CExtMiniDockFrameWnd * pMiniFrame
  803. );
  804. InternalDockStateBar * AppendDockBarAtSideLayout(
  805. CExtDockBar * pDockBar
  806. );
  807. }; // class InternalDockStateSite
  808. protected:
  809. class __PROF_UIS_API InternalFriendlyFrameWnd : public CFrameWnd
  810. {
  811. void SetOuterDockState(
  812. const CDockState & state,
  813. const OuterPropsArr_t & arrOuterProps,
  814. bool bSerializeFixedBarsState,
  815. bool bSerializeResizableBarsState
  816. );
  817. void GetOuterDockState(
  818. CDockState & state,
  819. OuterPropsArr_t & arrOuterProps
  820. ) const;
  821. public:
  822. bool SetupSmilyFrameWnd(void);
  823. void SetDockState(
  824. const InternalDockStateSite & state,
  825. bool bPresetWP
  826. );
  827. void GetDockState(
  828. InternalDockStateSite & state
  829. ) const;
  830. bool IsRecalcLayoutDelayed()
  831. {
  832. return
  833. ( (m_nIdleFlags & CFrameWnd::idleLayout) != NULL )
  834. ? true : false;
  835. }
  836. bool IsInRecalcLayout()
  837. {
  838. return m_bInRecalcLayout ? true : false;
  839. }
  840. BOOL ProcessHelpMsg( MSG & msg, DWORD * pContext )
  841. {
  842. return CFrameWnd::ProcessHelpMsg( msg, pContext );
  843. }
  844. HWND SetHelpCapture( POINT point, BOOL * pbDescendant )
  845. {
  846. return CFrameWnd::SetHelpCapture( point, pbDescendant );
  847. }
  848. friend class InternalDockStateSite;
  849. friend class CExtControlBar;
  850. }; // class InternalFriendlyFrameWnd
  851. struct __PROF_UIS_API InternalBarRepositionData_t
  852. {
  853. CControlBar * m_pBar;
  854. CRect m_rcSrc, m_rcDst;
  855. INT m_nSpaceAvailByBar,
  856. m_nSpaceAvailBySideBefore,
  857. m_nSpaceAvailBySideAfter;
  858. InternalBarRepositionData_t(
  859. CControlBar * pBar = NULL,
  860. bool bSetAdvData = false
  861. );
  862. InternalBarRepositionData_t(
  863. const InternalBarRepositionData_t & other
  864. );
  865. void _AssignFromOther(
  866. const InternalBarRepositionData_t & other
  867. );
  868. void SetBar(
  869. CControlBar * pBar,
  870. bool bSetAdvData = false
  871. );
  872. InternalBarRepositionData_t & operator = (
  873. const InternalBarRepositionData_t & other
  874. )
  875. {
  876. _AssignFromOther( other );
  877. return *this;
  878. }
  879. bool IsRectsEqual() const
  880. {
  881. return (m_rcSrc == m_rcDst) ? true : false;
  882. }
  883. CExtControlBar * GetExtBar();
  884. CExtControlBar * GetExtBarFixed();
  885. }; // struct InternalBarRepositionData_t
  886. // Construction
  887. public:
  888. struct __PROF_UIS_API QUERY_REPOSITION_CALC_EFFECT_DATA
  889. {
  890. enum // Prof-UIS reposition effect flags
  891. {
  892. __PRCF_WND_REPOS_DEFAULT = 0x0000,
  893. __PRCF_WND_REPOS_QUERY = 0x0001,
  894. __PRCF_WND_REPOS_EXTRA = 0x0002,
  895. __PRCF_WND_REPOS_MASK = 0x000F,
  896. __PRCF_EXCLUDE_FROM_CENTER = 0x0010,
  897. };
  898. SHORT m_nFlags; 
  899. CWnd * m_pWndToReposChilds;
  900. UINT m_nIDFirst;
  901. UINT m_nIDLast;
  902. UINT m_nIDLeftOver;
  903. LPRECT m_lpRectParam;
  904. LPCRECT m_lpcRectClient;
  905. bool m_bStretch:1;
  906. QUERY_REPOSITION_CALC_EFFECT_DATA(
  907. SHORT nFlags,
  908. CWnd * pWndToReposChilds,
  909. UINT nIDFirst,
  910. UINT nIDLast,
  911. UINT nIDLeftOver,
  912. LPRECT lpRectParam,
  913. LPCRECT lpcRectClient,
  914. bool bStretch
  915. );
  916. ~QUERY_REPOSITION_CALC_EFFECT_DATA();
  917. operator WPARAM() const;
  918. void QueryTypeSet( SHORT nQueryType );
  919. SHORT QueryTypeGet() const;
  920. bool IsQueryReposDefault() const;
  921. bool IsQueryReposQuery() const;
  922. bool IsQueryReposExtra() const;
  923. void ExcludeFromCenterSet(
  924. bool bExclude = true
  925. );
  926. bool ExcludeFromCenterGet() const;
  927. }; // struct QUERY_REPOSITION_CALC_EFFECT_DATA
  928. struct __PROF_UIS_API POPUP_MENU_EVENT_DATA
  929. {
  930. enum // Prof-UIS notification types
  931. {
  932. __PMED_DOCKBAR_CTX =  0, // dockbar context menu
  933. __PMED_CONTROLBAR_CTX =  1, // any control bar context menu (client area)
  934. __PMED_CONTROLBAR_NC_CTX =  2, // any control bar context menu (non-client area)
  935. __PMED_STATUSBAR_CTX =  3, // statusbar context menu
  936. __PMED_AUTOHIDESLIDER_CTX =  4, // autohide slider window context menu
  937. __PMED_MINIFRAME_NC_CTX =  5, // miniframe context menu (non-client area)
  938. __PMED_MDICLIAREA_CTX =  6, // MDI client area context menu
  939. __PMED_MDITABS_CTX =  7, // MDI-tabs window
  940. __PMED_AUTOHIDETABS_CTX =  8, // autohide-tabs window
  941. __PMED_DYNCBCTABS_CTX =  9, // dynamic control bar container tabs window
  942. __PMED_CONTROLBAR_NCBTNMENU_TOP = 10, // control bar nc-area-menu-button - top level
  943. __PMED_CONTROLBAR_NCBTNMENU_BARS = 11, // control bar nc-area-menu-button - control bars list 
  944. __PMED_CTXEXPBTN_TOP = 12, // content expand button - top level
  945. __PMED_CTXEXPBTN_APPEND = 13, // content expand button - append to buttons list
  946. __PMED_CTXEXPBTN_BARS = 14, // content expand button - control bars list
  947. __PMED_CONTROLBAR_NCBTNMENU_DYNSTATE = 15, // dynamic resizable control bar nc-area-menu-button
  948. __PMED_TAB_PAGE_CONTAINER_TABS_CTX = 16, // page-container-as-main-view-tabs window
  949. };
  950. SHORT m_nHelperNotificationType; // notification type
  951. CExtPopupMenuWnd * m_pPopupMenuWnd; // popup menu to initialize
  952. CWnd * m_pWndEventSrc; // any control bar or mdi-tabs or ahtohide-tabs
  953. UINT m_nMsgID; // message handler from where notification sent
  954. CObject * m_pObjectSrc; // NULL or CExtBarNcAreaButton
  955. CWnd * m_pWndInitialTarget; // window to notify first
  956. bool m_bPostNotification:1; // is it post notifictaion?
  957. CPoint m_ptScreen; // cursor position in screen coords
  958. POPUP_MENU_EVENT_DATA(
  959. SHORT nHelperNotificationType,
  960. CExtPopupMenuWnd * pPopupMenuWnd,
  961. CWnd * pWndEventSrc,
  962. const POINT & ptScreen,
  963. UINT nMsgID = WM_NULL,
  964. CObject * pObjectSrc = NULL
  965. );
  966. virtual ~POPUP_MENU_EVENT_DATA();
  967. virtual bool IsControlBarMenuListNotification() const;
  968. operator WPARAM() const;
  969. static POPUP_MENU_EVENT_DATA * FromWParam( WPARAM wParam );
  970. static POPUP_MENU_EVENT_DATA * FromMSG( MSG * pMSG );
  971. virtual bool NotifyTarget(
  972. bool bPostNotification
  973. );
  974. }; // struct POPUP_MENU_EVENT_DATA
  975. DECLARE_DYNCREATE( CExtControlBar );
  976. CExtControlBar();
  977. virtual void PmBridge_OnPaintManagerChanged(
  978. CExtPaintManager * pGlobalPM
  979. );
  980. virtual bool OnConstructDockSiteControlBarPopupMenu(
  981. CExtPopupMenuWnd * pPopup
  982. ) const;
  983. // Attributes
  984. public:
  985. bool m_bGripperStaticallyAtTop:1;
  986. //bool m_bAllowContractExpand:1; // (- v.2.24)
  987. bool m_bDoNotEraseClientBackground:1;
  988. bool m_bPresubclassDialogMode:1;
  989. bool m_bReflectParentSizing:1;
  990. bool m_bInCustomModeUpdateCmdUI:1;
  991. bool m_bNoForcedRecalcMetrics:1;
  992. bool m_bAppearInDockSiteControlBarPopupMenu:1;
  993. static const UINT g_nMsgQueryFocusChangingEnabled;
  994. static const UINT g_nMsgQueryRepositionCalcEffect;
  995. static const UINT g_nMsgQueryIcon;
  996. static const UINT g_nMsgPutToPopupMenu;
  997. static const UINT g_nMsgConstructPopupMenu;
  998. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  999. static int g_nTabDrarDropSelectionDelay;
  1000. static const UINT g_nMsgCreateTabbedBar;
  1001. static bool g_bDisableAutoHideAnimationExpanding;
  1002. static bool g_bDisableAutoHideAnimationCollapsing;
  1003. static INT g_nAutoHideAnimationStepCount;
  1004. static INT g_nAutoHideAnimationStepTime;
  1005. static const int g_nTabShapeMaxHeight;
  1006. static const int g_nTabShapeBottomLeftAreaWidth;
  1007. static const int g_nTabShapeBottomMiddleAreaWidth;
  1008. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1009. static bool g_bEnableOnIdleCalls;
  1010. struct __PROF_UIS_API QueryFocusChangingEnabled_t
  1011. {
  1012. bool m_bFocusChangingEnabled;
  1013. CWnd * m_pWndQueryOwner;
  1014. HWND m_hWndNewFocusOwner;
  1015. QueryFocusChangingEnabled_t(
  1016. CWnd * pWndQueryOwner,
  1017. HWND hWndNewFocusOwner
  1018. );
  1019. operator WPARAM()
  1020. {
  1021. return
  1022. reinterpret_cast < WPARAM > ( this );
  1023. }
  1024. };
  1025. static bool stat_QueryFocusChangingEnabled(
  1026. HWND hWndNotifyTarget,
  1027. CWnd * pWndQueryOwner,
  1028. HWND hWndNewFocusOwner
  1029. );
  1030. static bool stat_QueryFocusChangingEnabled(
  1031. CExtControlBar * pWndQueryOwner,
  1032. HWND hWndNewFocusOwner
  1033. );
  1034. static bool stat_DragDetect_ImplStep(
  1035. HWND hWnd,
  1036. POINT pt,
  1037. UINT nUpMessage = WM_LBUTTONUP
  1038. );
  1039. static bool stat_DoDragDetect(
  1040. HWND hWnd,
  1041. const POINT & ptWndClient,
  1042. UINT nUpMessage = WM_LBUTTONUP
  1043. );
  1044. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1045. static bool g_bUseMouseClickOnlyInAutoHideTabs; // (+ v.2.82) 
  1046. static bool g_bUseMouseClickOnOffStyleAutoHideTabs; // (+ v.2.83) 
  1047. static bool g_bAllowAutohideTabsOleDropTarget; // (+ v.2.23)
  1048. static bool g_bAllowDynamicTabsOleDropTarget; // (+ v.2.23)
  1049. static bool g_bAllowKeyboardTabSwitch; // (+ v.2.24)
  1050. static bool g_bAllowKeyboardAutohideSwitch; // (+ v.2.24)
  1051. static bool g_bTabsAtTop; // (+ v.2.43)
  1052. static DWORD g_dwTabContainerTabsStyle;
  1053. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1054. enum eResizablePanelDockingType_t
  1055. {
  1056. __RESIZABLE_DOCKING_TYPE_BY_THEME = -1,
  1057. __RESIZABLE_DOCKING_TYPE_STUDIO_2003 =  0,
  1058. __RESIZABLE_DOCKING_TYPE_STUDIO_2005 =  1,
  1059. __RESIZABLE_DOCKING_TYPE_STUDIO_2008_XP =  2,
  1060. __RESIZABLE_DOCKING_TYPE_STUDIO_2008_VISTA =  3,
  1061. __RESIZABLE_DOCKING_TYPE_STUDIO_2008_AUTO =  4,
  1062. __RESIZABLE_DOCKING_TYPE_MIN_VALUE =  0,
  1063. __RESIZABLE_DOCKING_TYPE_MAX_VALUE =  4,
  1064. };
  1065. static eResizablePanelDockingType_t g_eResizablePanelDockingType;
  1066. eResizablePanelDockingType_t OnQueryDockingType() const;
  1067. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1068. enum eAutoHideTabsType_t
  1069. {
  1070. __AUTOHIDE_TABS_TYPE_BY_THEME = -1,
  1071. __AUTOHIDE_TABS_TYPE_STUDIO_2003 = 0,
  1072. __AUTOHIDE_TABS_TYPE_STUDIO_2005 = 1,
  1073. __AUTOHIDE_TABS_TYPE_MIN_VALUE = 0,
  1074. __AUTOHIDE_TABS_TYPE_MAX_VALUE = 1,
  1075. };
  1076. static eAutoHideTabsType_t g_eAutoHideTabsType;
  1077. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1078. protected:
  1079. bool m_bDelelayRepaintNcButtons:1;
  1080. bool m_bFixedMode:1;
  1081. INT m_nGripHeightAtTop, m_nGripWidthAtLeft;
  1082. INT m_nSeparatorHeight, m_nSeparatorWidth;
  1083. INT m_nMinHW, m_nMinVH;
  1084. INT m_nTrackerOffset, m_nMetricOffset;
  1085. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1086. INT m_nAutoHideWidth, m_nAutoHideHeight;
  1087. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1088. public:
  1089. virtual INT  _GripperWidthAtLeftGet() const;
  1090. virtual void _GripperWidthAtLeftSet( INT nGripWidthAtLeft );
  1091. virtual INT  _GripperHeightAtTopGet() const;
  1092. virtual void _GripperHeightAtTopSet( INT nGripHeightAtTop );
  1093. virtual INT  _SeparatorWidthGet() const;
  1094. virtual void _SeparatorWidthSet( INT nSeparatorWidth );
  1095. virtual INT  _SeparatorHeightGet() const;
  1096. virtual void _SeparatorHeightSet( INT nSeparatorHeight );
  1097. virtual bool _IsCustomNcArea() const;
  1098. static bool g_bUseCustomNcArea;
  1099. static const UINT g_nMsgCustomNcAreaQuery;
  1100. struct __PROF_UIS_API CUSTOM_NC_AREA_QUERY_DATA
  1101. {
  1102. bool m_bQueryHandled:1;
  1103. HDC m_hDcDraw;
  1104. CExtControlBar * m_pBar;
  1105. CUSTOM_NC_AREA_QUERY_DATA(
  1106. CExtControlBar * pBar,
  1107. HDC hDcDraw = NULL
  1108. );
  1109. bool Notify();
  1110. operator WPARAM() const;
  1111. static CUSTOM_NC_AREA_QUERY_DATA * FromWPARAM( WPARAM wParam );
  1112. }; // struct CUSTOM_NC_AREA_QUERY_DATA
  1113. public:
  1114. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1115. virtual INT AutoHideWidthGet() const;
  1116. virtual void AutoHideWidthSet( INT nAutoHideWidth );
  1117. virtual INT AutoHideHeightGet() const;
  1118. virtual void AutoHideHeightSet( INT nAutoHideHeight );
  1119. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1120. protected:
  1121. // static CCriticalSection g_csCB;
  1122. static ExtControlBarVector_t g_AllBars;
  1123. // sizes in docked/floated state
  1124. CSize m_sizeDockedH, m_sizeDockedV, m_sizeFloated;
  1125. CRect m_rcGrip, m_rcRowResize, m_rcRowRecalc, m_rcRowRecalcUp;
  1126. // flags
  1127. bool m_bRowResizing:1;
  1128. bool m_bRowRecalcing:1;
  1129. bool m_bDragging:1;
  1130. bool m_bDragDetecting:1;
  1131. bool m_bReposSingleChildMode:1;
  1132. public:
  1133. virtual const CRect & _RectGripGet() const;
  1134. virtual void _RectGripSet( const RECT & rcGrip );
  1135. virtual const CRect & _RectRowResizeGet() const;
  1136. virtual void _RectRowResizeSet( const RECT & rcRowResize );
  1137. virtual const CRect & _RectRowRecalcGet() const;
  1138. virtual void _RectRowRecalcSet( const RECT & rcRowRecalc );
  1139. virtual const CRect & _RectRowRecalcUpGet() const;
  1140. virtual void _RectRowRecalcUpSet( const RECT & rcRowRecalcUp );
  1141. protected:
  1142. bool m_bUpdatingChain:1;
  1143. bool m_bSuspendTips; // not a bit field (required for referencing)
  1144. LONG m_nDelayedRowUpdateMetric;
  1145. // floating/dragging helpers
  1146. CPoint m_ptFloatHelper;
  1147. CPoint m_ptHelperDragOffsetFloated;
  1148. CPoint m_ptHelperDragOffsetDockedH;
  1149. CPoint m_ptHelperDragOffsetDockedV;
  1150. bool m_bWindowActive:1;
  1151. bool m_bTopRecalcing:1;
  1152. bool m_bNcAreaBtnTracking:1;
  1153. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1154. public:
  1155. bool m_bAutoHideDeactivateOnEsc:1;
  1156. protected:
  1157. bool m_bAutoHideMode:1;
  1158. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1159. CPoint m_ptDraggingLast;
  1160. public:
  1161. virtual bool IsBarWindowActive() const;
  1162. // Operations
  1163. public:
  1164. // Overrides
  1165. // ClassWizard generated virtual function overrides
  1166. //{{AFX_VIRTUAL(CExtControlBar)
  1167. public:
  1168. virtual BOOL PreTranslateMessage(MSG* pMsg);
  1169. protected:
  1170. virtual void PostNcDestroy();
  1171. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  1172. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  1173. virtual void PreSubclassWindow();
  1174. //}}AFX_VIRTUAL
  1175. // Implementation
  1176. protected:
  1177. bool m_bHelperSuppressDestruction:1;
  1178. public:
  1179. virtual BOOL DestroyWindow();
  1180. virtual ~CExtControlBar();
  1181. void SetInitDesiredSizeVertical(CSize size_data)
  1182. {
  1183. m_sizeDockedV = size_data;
  1184. }
  1185. void SetInitDesiredSizeHorizontal(CSize size_data)
  1186. {
  1187. m_sizeDockedH = size_data;
  1188. }
  1189. void SetInitDesiredSizeFloating(CSize size_data)
  1190. {
  1191. m_sizeFloated = size_data;
  1192. }
  1193. void SetInitDesiredPosFloating(CPoint ptFloat)
  1194. {
  1195. m_ptFloatHelper = ptFloat;
  1196. }
  1197. CSize GetSizeDockedVertical() const
  1198. {
  1199. return m_sizeDockedV;
  1200. }
  1201. CSize GetSizeDockedHorizontal() const
  1202. {
  1203. return m_sizeDockedH;
  1204. }
  1205. CSize GetSizeFloating() const
  1206. {
  1207. return m_sizeFloated;
  1208. }
  1209. CPoint GetPosFloating() const
  1210. {
  1211. return m_ptFloatHelper;
  1212. }
  1213. static bool ProfileBarStateLoad(
  1214. CFrameWnd * pFrame,
  1215. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  1216. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  1217. __EXT_MFC_SAFE_LPCTSTR sSectionNameProfile, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%%sSectionNameProfile%
  1218. LPWINDOWPLACEMENT pFrameWp = NULL, // need serialize frame's WP
  1219. bool bSerializeFixedBarsState = true,
  1220. bool bSerializeResizableBarsState = true,
  1221. HKEY hKeyRoot = HKEY_CURRENT_USER,
  1222. bool bEnableThrowExceptions = false
  1223. );
  1224. static bool ProfileBarStateSave(
  1225. CFrameWnd * pFrame,
  1226. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  1227. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  1228. __EXT_MFC_SAFE_LPCTSTR sSectionNameProfile, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%%sSectionNameProfile%%sSectionNameProfile%
  1229. LPWINDOWPLACEMENT pFrameWp = NULL, // need serialize frame's WP
  1230. bool bSerializeFixedBarsState = true,
  1231. bool bSerializeResizableBarsState = true,
  1232. HKEY hKeyRoot = HKEY_CURRENT_USER,
  1233. bool bEnableThrowExceptions = false
  1234. );
  1235. public:
  1236. virtual void OnExtBarStateSerializationComplete(
  1237. bool bStore
  1238. );
  1239. protected:
  1240. static CTypedPtrMap < CMapPtrToWord, CFrameWnd *, WORD > g_mapSF;
  1241. static bool ProfileBarStateFramePush(
  1242. CFrameWnd * pFrame,
  1243. bool bIsLoading
  1244. );
  1245. static bool ProfileBarStateFramePop(
  1246. CFrameWnd * pFrame
  1247. );
  1248. public:
  1249. static bool ProfileBarStateIsSerializing(
  1250. CFrameWnd * pFrame,
  1251. bool * p_bIsLoading = NULL
  1252. );
  1253. static bool ProfileBarStateSerialize(
  1254. CArchive & ar,
  1255. CFrameWnd * pFrame,
  1256. LPWINDOWPLACEMENT pFrameWp = NULL, // need serialize frame's WP
  1257. bool bSerializeFixedBarsState = true,
  1258. bool bSerializeResizableBarsState = true,
  1259. bool bEnableThrowExceptions = false
  1260. );
  1261.     virtual BOOL Create(
  1262. __EXT_MFC_SAFE_LPCTSTR lpszWindowName,
  1263. CWnd * pParentWnd,
  1264.         UINT nID = AFX_IDW_DIALOGBAR,
  1265. DWORD dwStyle =
  1266. WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS
  1267. |CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS
  1268. |CBRS_FLYBY|CBRS_SIZE_DYNAMIC
  1269. |CBRS_HIDE_INPLACE
  1270. );
  1271. static bool FindPrintPreviewMode(
  1272. CFrameWnd * pFrame
  1273. );
  1274. virtual bool IsDockSiteInPrintPreviewMode();
  1275. static bool IsOleIpObjActive(
  1276. CFrameWnd * pFrameSearch
  1277. );
  1278. bool IsOleIpObjActive() const;
  1279. virtual bool SafeDisplayBar();
  1280. static bool FindHelpMode(
  1281. CWnd * pWndStartSearch
  1282. );
  1283. static bool stat_FindSingleVisbleBarNested(
  1284. CDockBar * pDockBar,
  1285. CExtControlBar ** ppFoundBar
  1286. );
  1287. protected:
  1288. INT m_nFlashCaptionCounter, m_nFlashCaptionStepMilliseconds, m_nFlashCaptionTimerID;
  1289. public:
  1290. COLORREF m_clrFlashCaptionText, m_clrFlashCaptionBackground;
  1291. protected:
  1292. bool m_bFlashCaptionHighlightedState:1;
  1293. public:
  1294. bool FlashCaption_DoPaintNC(
  1295. CDC & dc,
  1296. LPVOID pPGD
  1297. );
  1298. virtual void FlashCaption_OnRepaint();
  1299. virtual void FlashCaption_OnTimer();
  1300. virtual bool FlashCaptionIsInProgress(
  1301. bool * p_bFlashCaptionHighlightedState = NULL
  1302. ) const;
  1303. virtual bool FlashCaption(
  1304. INT nFlashCount = -1, // negative value cancels current flashing
  1305. INT nStepMilliseconds = 250,
  1306. COLORREF clrFlashText = RGB(255,255,255),
  1307. COLORREF clrFlashBackground = RGB(255,0,0)
  1308. );
  1309. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  1310. virtual void OnCustomizeModeEnter();
  1311. virtual void OnCustomizeModeLeave();
  1312. bool m_bVisibleInCustomizeListBox:1;
  1313. virtual void OnCustomizeListBoxUpdate( CExtCustomizeToolbarsListBox * pWndList );
  1314. #endif // (!defined __EXT_MFC_NO_CUSTOMIZE)
  1315. protected:
  1316. static bool _FrameEnableDockingImpl(
  1317. CFrameWnd * pFrame,
  1318. DWORD dwDockStyle = CBRS_ALIGN_ANY,
  1319. bool bReplaceFloatingWnd = true
  1320. );
  1321. static bool _SetupFloatingFrameWndImpl(
  1322. CFrameWnd * pFrame
  1323. );
  1324. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1325. static bool _FrameInjectAutoHideAreasImpl(
  1326. CFrameWnd * pFrame
  1327. );
  1328. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1329. public:
  1330. static bool FrameEnableDocking(
  1331. CFrameWnd * pFrame,
  1332. DWORD dwDockStyle = CBRS_ALIGN_ANY,
  1333. bool bReplaceFloatingWnd = true
  1334. );
  1335. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1336. static bool FrameInjectAutoHideAreas(
  1337. CFrameWnd * pFrame
  1338. );
  1339. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1340. bool IsSingleOnRow(
  1341. bool bOnlyFixed = false,
  1342. bool bOnlyNonFixed = false
  1343. ) const;
  1344. void MakeSingleOnRow();
  1345. bool IsMinimizedOnRow() const;
  1346. bool IsMaximizedOnRow() const;
  1347. void MaximizeOnRow();
  1348. void MinimizeOnRow();
  1349. virtual bool IsFixedMode() const;
  1350. virtual bool IsFixedDockStyle() const;
  1351. UINT GetSafeDockBarDlgCtrlID() const;
  1352. bool IsDockedAtTop() const;
  1353. bool IsDockedAtBottom() const;
  1354. bool IsDockedAtLeft() const;
  1355. bool IsDockedAtRight() const;
  1356. bool IsDockedHorizontally() const;
  1357. bool IsDockedVertically() const;
  1358. bool IsDocked() const;
  1359. bool IsFloating() const;
  1360. virtual bool IsBarWithGripper(
  1361. bool * pbGripperAtTop = NULL,
  1362. bool * pbTextOnGripper = NULL
  1363. ) const;
  1364. virtual void OnShowControlBarChain(
  1365. bool bShow,
  1366. bool bDelay,
  1367. bool bOnlyOneBar = false
  1368. );
  1369. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1370. static bool g_bCloseOnlyOneBarInTabGroup;
  1371. virtual bool IsCloseOnlyOneBarInTabGroup() const;
  1372. virtual int OnReflectTabOleDragDrop(
  1373. COleDropTarget * pOleDropTarget
  1374. );
  1375. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1376. virtual CSize CalcFixedLayout(
  1377. BOOL bStretch,
  1378. BOOL bHorz
  1379. );
  1380. virtual CSize CalcDynamicLayout(
  1381. int nLength,
  1382. DWORD nMode
  1383. );
  1384. virtual void DoPaintNC( CDC * pDC );
  1385. virtual void DoPaint( CDC * pDC );
  1386. virtual void DoEraseBk( CDC * pDC );
  1387. bool m_bUseInvisibleCmdUI:1;
  1388. virtual void OnUpdateCmdUI(
  1389. CFrameWnd * pTarget,
  1390. BOOL bDisableIfNoHndler
  1391. );
  1392. LRESULT OnIdleUpdateCmdUI( WPARAM, LPARAM );
  1393. void OnInitialUpdate();
  1394. static BOOL DoCustomModePreTranslateMessage(
  1395. CWnd * pWndPretranslateSrc,
  1396. MSG * pMsg
  1397. );
  1398. static void DoCustomModeUpdateControlBars(
  1399. CWnd * pWndParentTarget,
  1400. BOOL bDisableIfNoHndler = TRUE
  1401. );
  1402. bool DoCustomModeUpdateCmdUI(
  1403. BOOL bDisableIfNoHndler = TRUE
  1404. );
  1405. protected:
  1406. virtual __EXT_MFC_INT_PTR OnToolHitTest(
  1407. CPoint point,
  1408. TOOLINFO * pTI
  1409. ) const;
  1410. virtual CExtPopupMenuTipWnd * OnAdvancedPopupMenuTipWndGet(
  1411. CObject * pHelperSrc = NULL,
  1412. LPARAM lParam = 0
  1413. ) const;
  1414. virtual void OnAdvancedPopupMenuTipWndDisplay(
  1415. CExtPopupMenuTipWnd & _ATTW,
  1416. const RECT & rcExcludeArea,
  1417. __EXT_MFC_SAFE_LPCTSTR strTipText,
  1418. CObject * pHelperSrc = NULL,
  1419. LPARAM lParam = 0
  1420. ) const;
  1421. public:
  1422. static bool g_bUseAdvancedToolTips;
  1423. virtual bool _GetFullRowMode() const;
  1424. virtual INT _CalcDesiredMinHW() const;
  1425. virtual INT _CalcDesiredMinVH() const;
  1426. virtual CSize _CalcDesiredMinFloatedSize() const;
  1427. virtual CSize _CalcDesiredMinOuterSize( BOOL bHorz ) const;
  1428. virtual CExtControlBar::InternalAffixmentData *
  1429. _AffixmentGetOuter();
  1430. virtual void _AffixmentSetOuter(
  1431. CExtControlBar::InternalAffixmentData * pAffixmentData
  1432. );
  1433. static CExtControlBar::InternalAffixmentData *
  1434. _AffixmentGetOuter(
  1435. CControlBar * pBar
  1436. );
  1437. static int _AffixmentCompareOuter(
  1438. CControlBar * pBar1,
  1439. CControlBar * pBar2
  1440. );
  1441. virtual void _AffixmentRecalcOuter();
  1442. virtual void _AffixmentSafeClearOuter();
  1443. virtual bool _AffixmentIsAlignedHW() const;
  1444. protected:
  1445. class FriendlyDockBarHack;
  1446. CSize _CalcDesiredLayout(
  1447. BOOL bHorz,
  1448. BOOL bForceFullRow = FALSE
  1449. );
  1450. enum eGFECB_t
  1451. {
  1452. // filters by control bar window properties
  1453. __GFECB_FIXED = 0x00000001L, // fixed sized
  1454. __GFECB_NONFIXED_MIN = 0x00000002L, // resizable and minimized on row
  1455. __GFECB_NONFIXED_NONMIN = 0x00000004L, // resizable and not minimized on row
  1456. __GFECB_NONFIXED = (__GFECB_NONFIXED_MIN|__GFECB_NONFIXED_NONMIN),
  1457. __GFECB_DOCKED_TOP = 0x00000008L,
  1458. __GFECB_DOCKED_BOTTOM = 0x00000010L,
  1459. __GFECB_DOCKED_LEFT = 0x00000020L,
  1460. __GFECB_DOCKED_RIGHT = 0x00000040L,
  1461. __GFECB_DOCKED_HORZ = (__GFECB_DOCKED_TOP|__GFECB_DOCKED_BOTTOM),
  1462. __GFECB_DOCKED_VERT = (__GFECB_DOCKED_LEFT|__GFECB_DOCKED_RIGHT),
  1463. __GFECB_DOCKED = (__GFECB_DOCKED_HORZ|__GFECB_DOCKED_VERT),
  1464. __GFECB_FLOATED = 0x00000080L,
  1465. __GFECB_BAR_VISIBLE = 0x00000100L,
  1466. __GFECB_BAR_INVISIBLE = 0x00000200L,
  1467. __GFECB_WND_VISIBLE = 0x00000400L,
  1468. __GFECB_WND_INVISIBLE = 0x00000800L,
  1469. __GFECB_VIS_BAR_ALL = (__GFECB_BAR_VISIBLE|__GFECB_BAR_INVISIBLE),
  1470. __GFECB_VIS_WND_ALL = (__GFECB_WND_VISIBLE|__GFECB_WND_INVISIBLE),
  1471. __GFECB_VIS_ALL = (__GFECB_BAR_VISIBLE|__GFECB_WND_VISIBLE),
  1472. __GFECB_INVIS_ALL = (__GFECB_BAR_INVISIBLE|__GFECB_WND_INVISIBLE),
  1473. // __GFECB_VIS_ALL = (__GFECB_VIS_BAR_ALL|__GFECB_VIS_WND_ALL),
  1474. __GFECB_ALL_NONRESTRICT = (__GFECB_FIXED|__GFECB_NONFIXED|__GFECB_DOCKED|__GFECB_FLOATED|__GFECB_VIS_ALL|__GFECB_INVIS_ALL),
  1475. // restriction by point
  1476. __GFECB_BYPT_ONLY_WND = 0x00008000L, // abondones all other __GFECB_BYPT_ flags
  1477. __GFECB_BYPT_CLIENT = 0x00010000L,
  1478. __GFECB_BYPT_NCGRIP = 0x00020000L,
  1479. __GFECB_BYPT_HTLEFT = 0x00040000L,
  1480. __GFECB_BYPT_HTRIGHT = 0x00080000L,
  1481. __GFECB_BYPT_HTTOP = 0x00100000L,
  1482. __GFECB_BYPT_HTBOTTOM = 0x00200000L,
  1483. __GFECB_BYPT_HTTOPLEFT = 0x00400000L,
  1484. __GFECB_BYPT_HTTOPRIGHT = 0x00800000L,
  1485. __GFECB_BYPT_HTBOTTOMLEFT = 0x01000000L,
  1486. __GFECB_BYPT_HTBOTTOMRIGHT = 0x02000000L,
  1487. __GFECB_BYPT_HT_CORNER = (__GFECB_BYPT_HTLEFT|__GFECB_BYPT_HTRIGHT|__GFECB_BYPT_HTTOP|__GFECB_BYPT_HTBOTTOM),
  1488. __GFECB_BYPT_HT_NONCORNER = (__GFECB_BYPT_HTTOPLEFT|__GFECB_BYPT_HTTOPRIGHT|__GFECB_BYPT_HTBOTTOMLEFT|__GFECB_BYPT_HTBOTTOMRIGHT),
  1489. __GFECB_BYPT_HTNOWHERE = 0x04000000L,
  1490. __GFECB_BYPT_HTSYSMENU = 0x06000000L,
  1491. __GFECB_BYPT_HTGROWBOX = 0x10000000L,
  1492. __GFECB_BYPT_HTMINBUTTON = 0x20000000L,
  1493. __GFECB_BYPT_HTMAXBUTTON = 0x40000000L,
  1494. __GFECB_BYPT_HT_BUTTONS = (__GFECB_BYPT_HTGROWBOX|__GFECB_BYPT_HTMINBUTTON|__GFECB_BYPT_HTMAXBUTTON),
  1495. __GFECB_BYPT_HT_BORDER = (__GFECB_BYPT_HT_CORNER|__GFECB_BYPT_HT_NONCORNER),
  1496. __GFECB_BYPT_HT_NONBORDER = (__GFECB_BYPT_HT_BUTTONS|__GFECB_BYPT_HTNOWHERE|__GFECB_BYPT_HTSYSMENU),
  1497. __GFECB_BYPT_HTNONCLIENT = (__GFECB_BYPT_HT_BORDER|__GFECB_BYPT_HT_NONBORDER),
  1498. __GFECB_BYPT_HTCLIENT = 0x80000000L,
  1499. __GFECB_BYPT_NC = (__GFECB_BYPT_NCGRIP|__GFECB_BYPT_HTNONCLIENT|__GFECB_BYPT_HTCLIENT),
  1500. __GFECB_BYPT_ALL = (__GFECB_BYPT_ONLY_WND|__GFECB_BYPT_NC|__GFECB_BYPT_CLIENT),
  1501. }; // enum eGFECB_t
  1502.     
  1503.     static void _GetFrameControlBars(
  1504. CControlBar * pBarExcludeSubTree,
  1505. CFrameWnd * pFrame,
  1506. ExtControlBarVector_t & vBars,
  1507. DWORD dwCallOpt = ((DWORD)__GFECB_ALL_NONRESTRICT),
  1508. CPoint ptRestrict = CPoint( -1000, -1000 )
  1509. );
  1510.     void _GetFrameControlBars(
  1511. bool bExcludeOwnSubtree,
  1512. ExtControlBarVector_t & vBars,
  1513. DWORD dwCallOpt = ((DWORD)__GFECB_ALL_NONRESTRICT),
  1514. CPoint ptRestrict = CPoint( -1000, -1000 )
  1515. ) const;
  1516. static CControlBar * _GetNextControlBarInRow(
  1517. CControlBar * pBar,
  1518. bool bNext = true, // next or previous
  1519. bool bExtBar = false,
  1520. bool bNonFixed = false
  1521. );
  1522. static CControlBar * _GetFirstControlBarInRow(
  1523. CControlBar * pBar,
  1524. bool bNext = false, // last or first
  1525. bool bExtBar = false,
  1526. bool bNonFixed = false
  1527. );
  1528.     void _GetRowBars(
  1529. MfcControlBarVector_t & vBars,
  1530. CRect * pRcAllBars = NULL,
  1531. INT * p_nOwnPos = NULL,
  1532. bool * p_bRowMaxSized = NULL, // row with resizable bars?
  1533. bool * p_bRowFullSized = NULL // row with menu-like bar?
  1534. ) const;
  1535. void _GetRowExtBars(
  1536. ExtControlBarVector_t & vBars,
  1537. bool bNonFixedOnly = true,
  1538. CRect * pRcAllBars = NULL,
  1539. INT * p_nOwnPos = NULL,
  1540. bool * p_bRowMaxSized = NULL, // row with resizable bars?
  1541. bool * p_bRowFullSized = NULL // row with menu-like bar?
  1542. ) const;
  1543.     void _GetNextRowBars(
  1544. bool bNextRow,
  1545. MfcControlBarVector_t & vBars,
  1546. CRect * pRcAllBars = NULL,
  1547. INT * p_nOwnPos = NULL,
  1548. bool * p_bRowMaxSized = NULL, // row with resizable bars?
  1549. bool * p_bRowFullSized = NULL // row with menu-like bar?
  1550. ) const;
  1551. bool _IsFirstBarInRow( bool bExtBar ) const;
  1552. bool _IsLastBarInRow( bool bExtBar ) const;
  1553.     static CFrameWnd * _GetDockingFrameImpl(
  1554. CControlBar * pBar
  1555. );
  1556.     CFrameWnd * _GetDockingFrameImpl() const;
  1557. virtual void _RecalcLayoutImpl();
  1558. virtual void _RecalcNcArea();
  1559. protected:
  1560. virtual bool _IsShowContentWhenDragging() const;
  1561. virtual bool _IsShowContentWhenRowResizing() const;
  1562. virtual bool _IsShowContentWhenRowRecalcing() const;
  1563. public:
  1564. virtual void OnRepositionSingleChild(
  1565. int cx = -1, // if negative - get from client area
  1566. int cy = -1,
  1567. bool bRedraw = true
  1568. );
  1569. public:
  1570. static CRect g_rcHelperRowResizingLimits;
  1571. virtual bool _RowResizingIsEnabled(
  1572. const CExtControlBar * pBarQuerySrc
  1573. ) const;
  1574. virtual bool _RowResizingGet() const;
  1575. virtual void _RowResizingStart();
  1576. protected:
  1577. virtual void _RowResizingStop( bool bCancel );
  1578. virtual void _RowResizingUpdateState();
  1579. public:
  1580. virtual bool _RowRecalcingIsEnabled(
  1581. const CExtControlBar * pBarQuerySrc
  1582. ) const;
  1583. virtual bool _RowRecalcingGet() const;
  1584. virtual void _RowRecalcingStart();
  1585. protected:
  1586. virtual void _RowRecalcingStop( bool bCancel );
  1587. virtual void _RowRecalcingUpdateState();
  1588. virtual bool _RowRecalcing_IsBottomEnabled();
  1589. virtual bool _RowRecalcing_IsTopEnabled();
  1590. virtual void _DrawResizingTracker( bool bErasingPrevious );
  1591. virtual void _DrawRecalcingTracker( bool bErasingPrevious );
  1592. public:
  1593. static const UINT g_nMsgDrawTrackedArea;
  1594. enum eDrawTrackedAreaType_t
  1595. {
  1596. __EDTAT_RESIZING_ENTIRE_ROW = 0,
  1597. __EDTAT_RESIZING_PART_OF_ROW = 1,
  1598. __EDTAT_RECTANGULAR_FRAME = 2,
  1599. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1600. __EDTAT_TAB_FRAME = 3,
  1601. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1602. }; // enum eDrawTrackedAreaType_t
  1603. struct __PROF_UIS_API MsgDrawTrackedAreaData_t
  1604. {
  1605. CExtControlBar & m_wndBar;
  1606. CDC & m_dcDraw;
  1607. eDrawTrackedAreaType_t m_eDTAT;
  1608. CRect m_rcDrawArea;
  1609. bool m_bErasingPrevious:1;
  1610. bool m_bMessageHandled:1;
  1611. MsgDrawTrackedAreaData_t(
  1612. CExtControlBar & wndBar,
  1613. CDC & dcDraw,
  1614. eDrawTrackedAreaType_t eDTAT,
  1615. const RECT & rcDrawArea,
  1616. bool bErasingPrevious
  1617. )
  1618. : m_wndBar( wndBar )
  1619. , m_dcDraw( dcDraw )
  1620. , m_eDTAT( eDTAT )
  1621. , m_rcDrawArea( rcDrawArea )
  1622. , m_bErasingPrevious( bErasingPrevious )
  1623. , m_bMessageHandled( false )
  1624. {
  1625. ASSERT_VALID( (&m_wndBar) );
  1626. ASSERT(
  1627. m_wndBar.GetSafeHwnd() != NULL
  1628. && ::IsWindow( m_wndBar.GetSafeHwnd() )
  1629. );
  1630. ASSERT( m_dcDraw.GetSafeHdc() != NULL );
  1631. }
  1632. void NotifyOrDrawDefault();
  1633. bool Notify();
  1634. void DrawDefault();
  1635. void Draw(
  1636. HBRUSH hBrush,
  1637. DWORD dwPatBltROP // raster operation code for invoking PatBlt()
  1638. );
  1639. }; // struct MsgDrawTrackedAreaData_t
  1640. public:
  1641. enum e_calc_dock_type_t
  1642. {
  1643. __ECDT_FLOATED =  0,
  1644. __ECDT_INNER_TOP =  1,
  1645. __ECDT_INNER_BOTTOM =  2,
  1646. __ECDT_INNER_LEFT =  3,
  1647. __ECDT_INNER_RIGHT =  4,
  1648. __ECDT_DOCKBAR_INNER_TOP =  5,
  1649. __ECDT_DOCKBAR_INNER_BOTTOM =  6,
  1650. __ECDT_DOCKBAR_INNER_LEFT =  7,
  1651. __ECDT_DOCKBAR_INNER_RIGHT =  8,
  1652. __ECDT_CIRCLE1_OUTER_TOP =  9,
  1653. __ECDT_CIRCLE1_OUTER_BOTTOM = 10,
  1654. __ECDT_CIRCLE1_OUTER_LEFT = 11,
  1655. __ECDT_CIRCLE1_OUTER_RIGHT = 12,
  1656. __ECDT_OWN_AREA = 13,
  1657. __ECDT_2005_OUTER_TOP = 14,
  1658. __ECDT_2005_OUTER_BOTTOM = 15,
  1659. __ECDT_2005_OUTER_LEFT = 16,
  1660. __ECDT_2005_OUTER_RIGHT = 17,
  1661. __ECDT_2005_INNER_TOP = 18,
  1662. __ECDT_2005_INNER_BOTTOM = 19,
  1663. __ECDT_2005_INNER_LEFT = 20,
  1664. __ECDT_2005_INNER_RIGHT = 21,
  1665. __ECDT_2005_BAR_TOP = 22,
  1666. __ECDT_2005_BAR_BOTTOM = 23,
  1667. __ECDT_2005_BAR_LEFT = 24,
  1668. __ECDT_2005_BAR_RIGHT = 25,
  1669. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1670. __ECDT_2005_BAR_NEW_TAB = 26,
  1671. __ECDT_2005_MAX_VALUE = 26,
  1672. __ECDT_TABBED_NEW = 27,
  1673. __ECDT_TABBED_UPDATE = 28,
  1674. __ECDT_TABBED_REINDEX = 29,
  1675. __ECDT_TABBED_REINDEX_NHM = 30, // the "no hide 2005 markers" version of the __ECDT_TABBED_REINDEX mode
  1676. #else // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1677. __ECDT_2005_MAX_VALUE = 25,
  1678. #endif // else from (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1679. __ECDT_2005_MIN_VALUE = 14
  1680. };
  1681. protected:
  1682. enum e_calc_fixed_resizing_t
  1683. {
  1684. __ECFR_NO_RESIZING = 0,
  1685. __ECFR_HORZ = 1,
  1686. __ECFR_VERT = 2,
  1687. };
  1688. class __PROF_UIS_API InternalDraggingState_t : public CObject
  1689. {
  1690. bool m_bEmpty:1, m_bDeepHalfSplit:1;
  1691. e_calc_dock_type_t m_eCDT;
  1692. e_calc_fixed_resizing_t m_eCFR;
  1693. UINT m_nCircleNo;
  1694. CRect m_rcTrack;
  1695. CExtControlBar * m_pExtBarSrc;
  1696. CExtControlBar * m_pExtBarDst;
  1697. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1698. LONG m_nTabReindex;
  1699. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1700. void _AssignFromOther(
  1701. const InternalDraggingState_t & other
  1702. );
  1703. bool _IsEqualToOther(
  1704. const InternalDraggingState_t & other
  1705. ) const
  1706. {
  1707. ASSERT_VALID( this );
  1708. ASSERT_VALID( (&other) );
  1709. if( m_bEmpty != other.m_bEmpty )
  1710. return false;
  1711. if( m_eCDT != other.m_eCDT )
  1712. return false;
  1713. // if( m_eCFR != other.m_eCFR )
  1714. // return false;
  1715. if( m_nCircleNo != other.m_nCircleNo )
  1716. return false;
  1717. if( m_rcTrack != other.m_rcTrack )
  1718. return false;
  1719. if( m_pExtBarSrc != other.m_pExtBarSrc )
  1720. return false;
  1721. if( m_pExtBarDst != other.m_pExtBarDst )
  1722. return false;
  1723. if( m_bDeepHalfSplit != other.m_bDeepHalfSplit )
  1724. return false;
  1725. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1726. if( m_nTabReindex != other.m_nTabReindex )
  1727. return false;
  1728. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1729. return true;
  1730. }
  1731. public:
  1732. InternalDraggingState_t(
  1733. CExtControlBar * pExtBarSrc = NULL
  1734. )
  1735. : m_bEmpty( true )
  1736. , m_bDeepHalfSplit( false )
  1737. , m_eCDT( __ECDT_FLOATED )
  1738. , m_eCFR( __ECFR_NO_RESIZING )
  1739. , m_nCircleNo( 0 )
  1740. , m_rcTrack( 0, 0, 0, 0 )
  1741. , m_pExtBarSrc( pExtBarSrc )
  1742. , m_pExtBarDst( NULL )
  1743. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1744. , m_nTabReindex( 0 )
  1745. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1746. {
  1747. }
  1748. InternalDraggingState_t(
  1749. const InternalDraggingState_t & other
  1750. )
  1751. {
  1752. _AssignFromOther( other );
  1753. }
  1754. InternalDraggingState_t & operator = (
  1755. const InternalDraggingState_t & other
  1756. )
  1757. {
  1758. _AssignFromOther( other );
  1759. return *this;
  1760. }
  1761. bool operator == (
  1762. const InternalDraggingState_t & other
  1763. ) const
  1764. {
  1765. return _IsEqualToOther( other );
  1766. }
  1767. bool operator != (
  1768. const InternalDraggingState_t & other
  1769. ) const
  1770. {
  1771. return ( ! _IsEqualToOther( other ) );
  1772. }
  1773. e_calc_dock_type_t GetCDT() const
  1774. {
  1775. ASSERT_VALID( this );
  1776. return m_eCDT;
  1777. }
  1778. e_calc_dock_type_t SetCDT( e_calc_dock_type_t eCDT )
  1779. {
  1780. //ASSERT_VALID( this );
  1781. e_calc_dock_type_t eOldCDT = m_eCDT;
  1782. m_eCDT = eCDT;
  1783. return eOldCDT;
  1784. }
  1785. e_calc_fixed_resizing_t GetCFR() const
  1786. {
  1787. ASSERT_VALID( this );
  1788. return m_eCFR;
  1789. }
  1790. e_calc_fixed_resizing_t SetCFR( e_calc_fixed_resizing_t eCFR )
  1791. {
  1792. //ASSERT_VALID( this );
  1793. e_calc_fixed_resizing_t eOldCFR = m_eCFR;
  1794. m_eCFR = eCFR;
  1795. return eOldCFR;
  1796. }
  1797. UINT GetCircleNo() const
  1798. {
  1799. return m_nCircleNo;
  1800. }
  1801. UINT SetCircleNo( UINT nCircleNo )
  1802. {
  1803. UINT nCircleNoOld = m_nCircleNo;
  1804. m_nCircleNo = nCircleNo;
  1805. return nCircleNoOld;
  1806. }
  1807. CRect & TrackRectGet()
  1808. {
  1809. ASSERT_VALID( this );
  1810. return m_rcTrack;
  1811. }
  1812. const CRect & TrackRectGet() const
  1813. {
  1814. ASSERT_VALID( this );
  1815. return m_rcTrack;
  1816. }
  1817. void TrackRectGet( CRect & rcTrack ) const
  1818. {
  1819. ASSERT_VALID( this );
  1820. rcTrack = m_rcTrack;
  1821. }
  1822. void TrackRectSet( const CRect & rcTrack )
  1823. {
  1824. ASSERT_VALID( this );
  1825. m_rcTrack = rcTrack;
  1826. }
  1827. void TrackRectSetEmpty()
  1828. {
  1829. ASSERT_VALID( this );
  1830. m_rcTrack.SetRectEmpty();
  1831. }
  1832. bool IsEmpty() const
  1833. {
  1834. //ASSERT_VALID( this );
  1835. ASSERT( this != NULL );
  1836. return m_bEmpty;
  1837. }
  1838. void SetEmpty(
  1839. bool bEmpty = true
  1840. );
  1841. bool IsDeepHalfSplit() const
  1842. {
  1843. ASSERT_VALID( this );
  1844. return m_bDeepHalfSplit;
  1845. }
  1846. void SetDeepHalfSplit( bool bDeepHalfSplit = true )
  1847. {
  1848. ASSERT_VALID( this );
  1849. m_bDeepHalfSplit = bDeepHalfSplit;
  1850. }
  1851. CExtControlBar * ExtBarSrcGet()
  1852. {
  1853. //ASSERT_VALID( this );
  1854. ASSERT( this != NULL );
  1855. return m_pExtBarSrc;
  1856. }
  1857. CExtControlBar * ExtBarDstGet()
  1858. {
  1859. ASSERT_VALID( this );
  1860. return m_pExtBarDst;
  1861. }
  1862. CExtControlBar * ExtBarSrcSet(
  1863. CExtControlBar * pExtBarSrc
  1864. )
  1865. {
  1866. ASSERT_VALID( this );
  1867. ASSERT( pExtBarSrc != NULL );
  1868. ASSERT_VALID( pExtBarSrc );
  1869. CExtControlBar * pExtBarSrcOld = m_pExtBarSrc;
  1870. m_pExtBarSrc = pExtBarSrc;
  1871. ASSERT_VALID( this );
  1872. return pExtBarSrcOld;
  1873. }
  1874. CExtControlBar * ExtBarDstSet(
  1875. CExtControlBar * pExtBarDst = NULL,
  1876. bool bNoCheckOnShutdown = false
  1877. );
  1878. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1879. LONG ReindexPosGet() const
  1880. {
  1881. ASSERT_VALID( this );
  1882. if( m_eCDT != __ECDT_TABBED_REINDEX
  1883. && m_eCDT != __ECDT_TABBED_REINDEX_NHM
  1884. )
  1885. return (-1L);
  1886. return m_nTabReindex;
  1887. }
  1888. void ReindexPosCalc( CPoint ptCursor );
  1889. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1890. void DrawState( bool bErasingPrevious );
  1891. private:
  1892. void _DoFixed_BasicAdjustment(
  1893. CPoint ptTrack, // in screen coords
  1894. bool bForceFloatMode
  1895. );
  1896. void _DoFixed_FloatingAdjustment(
  1897. CPoint ptTrack // in screen coords
  1898. );
  1899. bool _DoFixed_OuterDockerAdjustment(
  1900. CPoint ptTrack, // in screen coords
  1901. CExtDockOuterBar * pOuterDocker
  1902. );
  1903. static void _DoFixed_StaticOuterRowSwap(
  1904. CControlBar * pBar1,
  1905. CControlBar * pBar2
  1906. );
  1907. static void _DoFixed_StaticMinimalDockSiteRecalc(
  1908. CFrameWnd * pDockSite,
  1909. CExtDockOuterBar * pOuterDocker
  1910. );
  1911. public:
  1912. void CalcStateDynamic(
  1913. CPoint ptTrack, // in screen coords
  1914. bool bForceFloatMode
  1915. );
  1916. #ifdef _DEBUG
  1917. virtual void AssertValid() const
  1918. {
  1919. ASSERT( this != NULL );
  1920. if( !m_bEmpty )
  1921. {
  1922. ASSERT( m_pExtBarSrc != NULL );
  1923. ASSERT_VALID( m_pExtBarSrc );
  1924. CFrameWnd * pFrameSrc =
  1925. m_pExtBarSrc->_GetDockingFrameImpl();
  1926. ASSERT_VALID( pFrameSrc );
  1927. pFrameSrc;
  1928. if( m_pExtBarDst != NULL )
  1929. {
  1930. ASSERT_VALID( m_pExtBarDst );
  1931. CFrameWnd * pFrameDst =
  1932. m_pExtBarDst->_GetDockingFrameImpl();
  1933. ASSERT_VALID( pFrameDst );
  1934. ASSERT( pFrameSrc == pFrameDst );
  1935. }
  1936. } // if( !m_bEmpty )
  1937. else
  1938. {
  1939. ASSERT( m_pExtBarDst == NULL );
  1940. } // if( !m_bEmpty )
  1941. CObject::AssertValid();
  1942. }
  1943. virtual void Dump( CDumpContext & dc ) const
  1944. {
  1945. CObject::Dump( dc );
  1946. }
  1947. #endif
  1948. }; // class InternalDraggingState_t
  1949. friend class InternalDraggingState_t;
  1950. static InternalDraggingState_t g_DragStateOld;
  1951. static InternalDraggingState_t g_DragStateNew;
  1952. static bool g_bUpdatingDragState;
  1953. virtual void _DraggingDoDeepHalfSplit(
  1954. CExtControlBar * pExtBar,
  1955. UINT nHalfSplitID, // one of AFX_IDW_DOCKBAR_... docked value
  1956. int nPercentToOccupy = 50 // greater then zero and less then one hundred
  1957. );
  1958. virtual bool _DraggingApplyState(
  1959. CExtControlBar::InternalDraggingState_t & _ds,
  1960. bool bFinalApply
  1961. );
  1962. public:
  1963. static CExtControlBar * _DraggingGetBar(); // return currently dagging controlbar
  1964. static bool g_bLockAllBars;
  1965. virtual bool _DraggingIsEnabled(
  1966. const CExtControlBar * pBarQuerySrc
  1967. ) const;
  1968. enum e_control_bar_position_changing_t
  1969. {
  1970. __ECBPC_EMPTY = 0,
  1971. __ECBPC_REDOCKING = 1,
  1972. __ECBPC_ROW_RESIZING = 2,
  1973. __ECBPC_IN_ROW_RESIZING = 3,
  1974. __ECBPC_FLOATING_FRAME_RESIZING = 4,
  1975. __ECBPC_MUTUAL_DEPENDENCY = 5,
  1976. };
  1977. virtual e_control_bar_position_changing_t GetCurrentControlBarPositionChangingType() const;
  1978. virtual void OnControlBarPositionChange(
  1979. CExtControlBar * pBarEventSrc,
  1980. e_control_bar_position_changing_t eCBPC,
  1981. bool bInitial,
  1982. bool bFinal
  1983. );
  1984. protected:
  1985. e_control_bar_position_changing_t m_eCBPC;
  1986. virtual void _OnControlBarPositionChange_RedockingImpl(
  1987. CExtControlBar * pBarEventSrc,
  1988. e_control_bar_position_changing_t eCBPC,
  1989. bool bInitial,
  1990. bool bFinal
  1991. );
  1992. virtual void _OnControlBarPositionChange_InRowImpl(
  1993. CExtControlBar * pBarEventSrc,
  1994. e_control_bar_position_changing_t eCBPC,
  1995. bool bInitial,
  1996. bool bFinal
  1997. );
  1998. static bool _DraggingCancel(); // returns true if dragging was really canceled
  1999.     virtual void _DraggingStart(
  2000. const CPoint & point,
  2001. const CPoint & pointOffset = CPoint( 0, 0 ),
  2002. CSize sizeWaitMouseMove = CSize( 1, 1 )
  2003. );
  2004.     virtual void _DraggingStop( bool bCancel );
  2005.     virtual void _DraggingUpdateState(
  2006. const CPoint & point,
  2007. bool bForceFloatMode
  2008. );
  2009. virtual void _Dragging_OnStart();
  2010. virtual void _Dragging_OnStop(
  2011. InternalDraggingState_t & _dsOld,
  2012. InternalDraggingState_t & _dsNew,
  2013. bool bCancel
  2014. );
  2015. virtual void _SetCursor(
  2016. const CPoint & point
  2017. );
  2018. bool _IsSingleVisibleInFloatingPalette();
  2019. virtual void _GetDeepNcModeMetrics(
  2020. bool & bEnableResizerLeft,
  2021. bool & bEnableResizerTop,
  2022. bool & bEnableResizerRight,
  2023. bool & bEnableResizerBottom
  2024. );
  2025. public:
  2026. bool m_bDelayShowInvoked:1, m_bDelayShowFlag:1;
  2027. virtual void DelayShow( BOOL bShow );
  2028. protected:
  2029. virtual void _UpdateVisibilityInChain();
  2030. virtual void _UpdateVisibilityInRow();
  2031. virtual void _ActivateOnClick();
  2032. virtual void _OnNcMiniFrameActivate( bool bActive );
  2033. static CExtControlBar * g_pBarToggleFloatingState;
  2034. public:
  2035. static CExtControlBar * _GetBarToggleFloatingState();
  2036. static CFrameWnd * DockSiteFromWnd(
  2037. CWnd * pWndStartSearch
  2038. );
  2039. static HWND FindHwndNotSafeForMutualPaint(
  2040. CWnd * pWndStartSearch
  2041. );
  2042. virtual bool _IsDockSiteCustomizeMode() const;
  2043. UINT GetDockBarCircleNo() const;
  2044. virtual bool _CanDockToInnerCircles() const;
  2045. virtual bool _CanDockToTabbedContainers(
  2046. CExtControlBar * pDestBar
  2047. ) const;
  2048. virtual bool _CanDockLTRB(
  2049. CExtControlBar * pDestBar
  2050. ) const;
  2051. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2052. public:
  2053. virtual CExtDynTabControlBar * _GetNearestTabbedContainer();
  2054. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2055. virtual CExtDynControlBar * _GetNearestDynamicContainer();
  2056. protected:
  2057. void _PreSyncRowMetrics();
  2058. virtual void OnFrameBarCheckCmd(
  2059. bool bResizableCheckmarks = false
  2060. );
  2061. virtual void OnFrameBarCheckUpdate(
  2062. CCmdUI* pCmdUI,
  2063. bool bResizableCheckmarks = false
  2064. );
  2065. public:
  2066. static bool stat_AdjustOccCompatibilityTree(
  2067. CWnd * pWndRoot
  2068. );
  2069. static void stat_RedrawFloatingFrames( CFrameWnd * pDockSite );
  2070. static void stat_RecalcBarMetrics( CFrameWnd * pDockSite );
  2071. static CWnd * stat_GetWndForPlacement( CWnd * pWnd );
  2072. static bool stat_GetWindowPlacement( HWND hWnd, WINDOWPLACEMENT & _wp );
  2073. static bool stat_SetWindowPlacement( HWND hWnd, const WINDOWPLACEMENT & _wp );
  2074. static bool stat_SaveWindowRect(
  2075. HWND hWnd,
  2076. __EXT_MFC_SAFE_LPCTSTR strSection,
  2077. __EXT_MFC_SAFE_LPCTSTR strEntry
  2078. );
  2079. static bool stat_LoadWindowRect(
  2080. HWND hWnd,
  2081. __EXT_MFC_SAFE_LPCTSTR strSection,
  2082. __EXT_MFC_SAFE_LPCTSTR strEntry,
  2083. bool bForceHideWindow = false
  2084. );
  2085. static bool g_bUseCmdManagerForSetMessageString;
  2086. static void stat_SetMessageString(
  2087. CWnd * pWnd,
  2088. UINT nCmdID = AFX_IDS_IDLEMESSAGE
  2089. );
  2090. static HWND stat_FindMdiClientHWND(
  2091. HWND hWndMdiFrame
  2092. );
  2093. static BOOL DoFrameBarCheckCmd(
  2094. CFrameWnd * pFrame,
  2095. UINT nBarID,
  2096. bool bResizableCheckmarks = false
  2097. );
  2098. static void DoFrameBarCheckUpdate(
  2099. CFrameWnd * pFrame,
  2100. CCmdUI* pCmdUI,
  2101. bool bResizableCheckmarks = false
  2102. );
  2103. virtual CExtMiniDockFrameWnd * OnCreateFloatingFrame(
  2104. DWORD dwStyle
  2105. );
  2106. protected:
  2107. UINT m_nTearOffCmdID;
  2108. public:
  2109. static CExtControlBar * FindTearOffBar(
  2110. CFrameWnd * pDockSite,
  2111. UINT nTearOffCmdID
  2112. );
  2113. virtual UINT TearOffCommandGet() const;
  2114. virtual void TearOffCommandSet( UINT nCmdID );
  2115. // toggle docking state
  2116. virtual void ToggleDocking();
  2117. // float control bar into recent floated position
  2118. void FloatControlBar(
  2119. DWORD dwStyle = CBRS_ALIGN_TOP
  2120. );
  2121. // float control bar
  2122. virtual void FloatControlBar(
  2123. CPoint ptFloat,
  2124. DWORD dwStyle = CBRS_ALIGN_TOP
  2125. );
  2126. // dock control bar to new circle (most inner or outer)
  2127. virtual bool DockControlBarInnerOuter(
  2128. UINT nDockBarID,
  2129. bool bInner,
  2130. CFrameWnd * pDockSite = NULL, // can be NULL only if bar already was at once docked
  2131. bool bRecalcLayout = true
  2132. );
  2133. // dock control bar relatively to other control bar (extended version)
  2134. bool DockControlBarLTRB(
  2135. CExtControlBar * pBarTarget,
  2136. UINT nDockBarID = AFX_IDW_DOCKBAR_BOTTOM,
  2137. bool bRecalcLayout = true
  2138. );
  2139. // dock control bar relatively to other control bar using
  2140. // space percent specification (extended version)
  2141. virtual bool DockControlBarLTRB(
  2142. int nPercentToOccupy, // greater then zero and less then one hundred
  2143. CExtControlBar * pBarTarget,
  2144. UINT nDockBarID = AFX_IDW_DOCKBAR_BOTTOM,
  2145. bool bRecalcLayout = true
  2146. );
  2147. // dock control bar to new row
  2148. virtual bool DockControlBar(
  2149. UINT nDockBarID,
  2150. UINT nCircleNo,
  2151. CFrameWnd * pDockSite = NULL, // can be NULL only if bar already was at once docked
  2152. bool bRecalcLayout = true
  2153. );
  2154. // dock control bar relatively to other control bar
  2155. virtual bool DockControlBar(
  2156. CExtControlBar * pBar,
  2157. bool bHorzBarHalfSplit,
  2158. bool bInnerHalfSplit = false,
  2159. CFrameWnd * pDockSite = NULL, // can be NULL only if bar already was at once docked
  2160. bool bRecalcLayout = true
  2161. );
  2162. // dock control bar into tabbed container
  2163. virtual bool DockControlBarIntoTabbedContainer(
  2164. CExtControlBar * pBar,
  2165. INT nIndex = -1, // append
  2166. CFrameWnd * pDockSite = NULL, // can be NULL only if bar already was at once docked
  2167. bool bRecalcLayout = true
  2168. );
  2169. virtual bool _FloatStateChangingIsEnabled(
  2170. const CExtControlBar * pBarQuerySrc
  2171. ) const;
  2172. virtual bool _NcMenuButtonIsEnabled(
  2173. const CExtControlBar * pBarQuerySrc
  2174. ) const;
  2175. virtual bool _ClosingIsEnabled(
  2176. const CExtControlBar * pBarQuerySrc
  2177. ) const;
  2178. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2179. virtual bool _AutoHidingIsEnabled(
  2180. const CExtControlBar * pBarQuerySrc
  2181. ) const;
  2182. // is bar in autohide mode
  2183. virtual bool AutoHideModeGet() const;
  2184. // switch to/restore from autohide mode
  2185. virtual bool AutoHideModeSet(
  2186. bool bAutoHideMode,
  2187. bool bAnimate,
  2188. bool bRecalcLayout,
  2189. bool bForceNoShow
  2190. );
  2191. virtual bool OnQueryVisibilityInAutoHideTabs() const;
  2192. virtual bool OnQueryVisibilityInContainerTabs() const;
  2193. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2194. private:
  2195. typedef
  2196. CArray < CExtBarNcAreaButton *, CExtBarNcAreaButton * >
  2197. NcButtonsArr_t;
  2198. NcButtonsArr_t m_vNcButtons;
  2199. public:
  2200. enum e_bar_caption_text_t
  2201. {
  2202. __EBCT_SINGLE_CAPTION_DOCKED = 0,
  2203. __EBCT_SINGLE_CAPTION_FLOATING = 1,
  2204. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2205. __EBCT_TAB_GROUP_CAPTION_DOCKED = 2,
  2206. __EBCT_TAB_GROUP_CAPTION_FLOATING = 3,
  2207. __EBCT_TAB_ITEM_CAPTION = 4,
  2208. __EBCT_AUTOHIDE_ITEM_CAPTION = 5,
  2209. __EBCT_AUTOHIDE_SLIDER_CAPTION = 6,
  2210. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2211. #if (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  2212. __EBCT_DOCUMENT_CONTAINER_CAPTION = 7
  2213. #endif // (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  2214. };
  2215. virtual void OnGetBarCaptionText(
  2216. e_bar_caption_text_t eBCT,
  2217. CExtSafeString & strCaptionText
  2218. ) const;
  2219. virtual CRect & NcButtons_CalcGripperTextLocation(
  2220. CRect & rcPreCalcText
  2221. );
  2222. UINT NcButtons_HitTest(
  2223. CPoint point,
  2224. CExtBarNcAreaButton ** ppBtn = NULL
  2225. );
  2226. void NcButtons_Paint( CDC & dc );
  2227. INT NcButtons_GetCount() const
  2228. {
  2229. ASSERT_VALID( this );
  2230. return (INT)m_vNcButtons.GetSize();
  2231. }
  2232. CExtBarNcAreaButton * NcButtons_GetAt( INT nIndex )
  2233. {
  2234. ASSERT_VALID( this );
  2235. ASSERT( nIndex >= 0 && nIndex < m_vNcButtons.GetSize() );
  2236. CExtBarNcAreaButton * pBtn = 
  2237. m_vNcButtons.GetAt( nIndex );
  2238. ASSERT_VALID( pBtn );
  2239. return pBtn;
  2240. }
  2241. const CExtBarNcAreaButton * NcButtons_GetAt( INT nIndex ) const
  2242. {
  2243. ASSERT_VALID( this );
  2244. ASSERT( nIndex >= 0 && nIndex < m_vNcButtons.GetSize() );
  2245. const CExtBarNcAreaButton * pBtn = 
  2246. m_vNcButtons.GetAt( nIndex );
  2247. ASSERT_VALID( pBtn );
  2248. return pBtn;
  2249. }
  2250. void NcButtons_SetAt(
  2251. INT nIndex,
  2252. CExtBarNcAreaButton * pBtn
  2253. )
  2254. {
  2255. ASSERT_VALID( this );
  2256. ASSERT( pBtn != NULL );
  2257. if( nIndex < 0 )
  2258. {
  2259. m_vNcButtons.Add( pBtn );
  2260. return;
  2261. }
  2262. ASSERT_VALID( pBtn );
  2263. ASSERT( nIndex >= 0 && nIndex <= m_vNcButtons.GetSize() );
  2264. if( nIndex != m_vNcButtons.GetSize() )
  2265. {
  2266. CExtBarNcAreaButton * pBtnOld =
  2267. m_vNcButtons.GetAt( nIndex );
  2268. ASSERT_VALID( pBtnOld );
  2269. if( pBtnOld != pBtn )
  2270. {
  2271. pBtnOld->OnNcDestroy();
  2272. m_vNcButtons.SetAt( nIndex, pBtn );
  2273. }
  2274. return;
  2275. } // if( nIndex != m_vNcButtons.GetSize() )
  2276. m_vNcButtons.Add( pBtn );
  2277. }
  2278. void NcButtons_Add( CExtBarNcAreaButton * pBtn )
  2279. {
  2280. ASSERT_VALID( this );
  2281. NcButtons_SetAt( -1, pBtn );
  2282. }
  2283. void NcButtons_InsertAt( INT nIndex, CExtBarNcAreaButton * pBtn )
  2284. {
  2285. ASSERT_VALID( this );
  2286. if( ( nIndex < 0 ) || ( nIndex >= INT(m_vNcButtons.GetSize()) ) )
  2287. {
  2288. NcButtons_Add( pBtn );
  2289. return;
  2290. }
  2291. ASSERT( nIndex >= 0 && nIndex <= m_vNcButtons.GetSize() );
  2292. m_vNcButtons.InsertAt( nIndex, pBtn );
  2293. }
  2294. void NcButtons_RemoveAt( INT nIndex )
  2295. {
  2296. ASSERT_VALID( this );
  2297. ASSERT( nIndex >= 0 && nIndex < m_vNcButtons.GetSize() );
  2298. CExtBarNcAreaButton * pBtnOld =
  2299. m_vNcButtons.GetAt( nIndex );
  2300. ASSERT_VALID( pBtnOld );
  2301. pBtnOld->OnNcDestroy();
  2302. m_vNcButtons.RemoveAt( nIndex );
  2303. }
  2304. void NcButtons_RemoveAll()
  2305. {
  2306. ASSERT_VALID( this );
  2307. INT nCount = (INT)m_vNcButtons.GetSize();
  2308. for( INT nIndex = 0; nIndex < nCount; nIndex++ )
  2309. {
  2310. CExtBarNcAreaButton * pBtnOld =
  2311. m_vNcButtons.GetAt( nIndex );
  2312. ASSERT_VALID( pBtnOld );
  2313. pBtnOld->OnNcDestroy();
  2314. }
  2315. m_vNcButtons.RemoveAll();
  2316. m_vNcButtons.FreeExtra();
  2317. }
  2318. virtual bool NcButtons_HandleClick(
  2319. CExtBarNcAreaButton * pNcAreaButton,
  2320. CPoint point,
  2321. CExtControlBar * pBarEventSource,
  2322. CExtControlBar * pBarActiveInContainer
  2323. );
  2324. virtual void NcButtons_PostClick(
  2325. CExtBarNcAreaButton * pNcAreaButton,
  2326. CPoint point,
  2327. CExtControlBar * pBarEventSource,
  2328. CExtControlBar * pBarActiveInContainer
  2329. );
  2330. virtual bool NcButtons_HandleQueryVisibility(
  2331. bool & bButtonIsVisible,
  2332. CExtBarNcAreaButton * pNcAreaButton,
  2333. CExtControlBar * pBarEventSource,
  2334. CExtControlBar * pBarActiveInContainer
  2335. );
  2336. virtual bool NcButtons_HandleDraw(
  2337. CDC & dc,
  2338. CExtBarNcAreaButton * pNcAreaButton,
  2339. CExtControlBar * pBarEventSource,
  2340. CExtControlBar * pBarActiveInContainer
  2341. );
  2342. virtual bool NcButtons_HandleHitTest(
  2343. UINT & nExternalHT,
  2344. CPoint point,
  2345. CExtBarNcAreaButton * pNcAreaButton,
  2346. CExtControlBar * pBarEventSource,
  2347. CExtControlBar * pBarActiveInContainer
  2348. );
  2349. virtual bool NcButtons_HandleQueryCursor(
  2350. HCURSOR & hExternalCursor,
  2351. CPoint point,
  2352. CExtBarNcAreaButton * pNcAreaButton,
  2353. CExtControlBar * pBarEventSource,
  2354. CExtControlBar * pBarActiveInContainer
  2355. );
  2356. virtual bool NcButtons_HandleReposition(
  2357. CExtBarNcAreaButton * pPrevBtn,
  2358. CExtBarNcAreaButton * pNcAreaButton,
  2359. CExtControlBar * pBarEventSource,
  2360. CExtControlBar * pBarActiveInContainer
  2361. );
  2362. virtual bool NcButtons_HandleToolHitTest(
  2363. __EXT_MFC_INT_PTR & hExternalToolHT,
  2364. CPoint point,
  2365. TOOLINFO * pTI,
  2366. CExtBarNcAreaButton * pNcAreaButton,
  2367. CExtControlBar * pBarEventSource,
  2368. CExtControlBar * pBarActiveInContainer
  2369. );
  2370. virtual void OnNcAreaButtonsReinitialize();
  2371. virtual void OnNcAreaButtonsReposition();
  2372. virtual bool OnQueryBarHoverProcessingEnabled() const;
  2373. static bool g_bControlBarClassRegistered;
  2374. static bool RegisterControlBarClass();
  2375. static void RepositionBarsEx(
  2376. CWnd * pWndToReposChilds,
  2377. UINT nIDFirst,
  2378. UINT nIDLast,
  2379. UINT nIDLeftOver,
  2380. UINT nFlag = 0,
  2381. LPRECT lpRectParam = NULL,
  2382. LPCRECT lpRectClient = NULL,
  2383. BOOL bStretch = TRUE
  2384. );
  2385. virtual LRESULT DoHelpHitTest( CPoint ptHelpHitTest );
  2386. virtual bool _OnMouseMoveMsg(UINT nFlags, CPoint point);
  2387. #if (!defined __EXT_MFC_NO_CUSTOMIZE)
  2388. protected:
  2389. mutable CExtCustomizeSite * m_pNotifiedCustomizeSite;
  2390. public:
  2391. virtual CExtCustomizeSite * NotifiedCustomizeSiteGet() const;
  2392. #endif
  2393. protected:
  2394. bool m_bDisplaying:1, m_bVisCheckFlag:1;
  2395. public:
  2396. virtual bool _DisplayingGet() const;
  2397. virtual void _DisplayingSet( bool bDisplaying );
  2398. virtual void AnimationSite_OnProgressShutdownTimer( UINT nTimerID );
  2399. virtual HWND AnimationSite_GetSafeHWND() const;
  2400. // Generated message map functions
  2401. protected:
  2402. //{{AFX_MSG(CExtControlBar)
  2403. afx_msg UINT OnNcHitTest(CPoint point);
  2404. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  2405. afx_msg void OnNcPaint();
  2406. afx_msg void OnCancelMode();
  2407. afx_msg void OnCaptureChanged(CWnd *pWnd);
  2408. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  2409. afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
  2410. afx_msg void OnNcLButtonUp(UINT nHitTest, CPoint point);
  2411. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  2412. afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
  2413. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  2414. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  2415. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  2416. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  2417. afx_msg void OnSize(UINT nType, int cx, int cy);
  2418. afx_msg void OnNcLButtonDblClk(UINT nHitTest, CPoint point);
  2419. afx_msg void OnNcRButtonUp(UINT nHitTest, CPoint point);
  2420. afx_msg void OnNcMButtonDown(UINT nHitTest, CPoint point);
  2421. afx_msg void OnNcRButtonDown(UINT nHitTest, CPoint point);
  2422. afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
  2423. afx_msg void OnSetFocus(CWnd* pOldWnd);
  2424. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  2425. afx_msg void OnTimer(__EXT_MFC_UINT_PTR nIDEvent);
  2426. //}}AFX_MSG
  2427. afx_msg LRESULT OnSetText(WPARAM wParam, LPARAM lParam);
  2428. afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
  2429. afx_msg LRESULT OnHelpHitTest(WPARAM wParam, LPARAM lParam);
  2430. afx_msg void OnSysColorChange();
  2431. afx_msg void OnSettingChange(UINT uFlags, __EXT_MFC_SAFE_LPCTSTR lpszSection);
  2432. afx_msg LRESULT OnDisplayChange( WPARAM wParam, LPARAM lParam );
  2433. afx_msg LRESULT OnThemeChanged( WPARAM wParam, LPARAM lParam );
  2434. DECLARE_MESSAGE_MAP()
  2435. friend class CExtBarButton;
  2436. friend class CExtBarContentExpandButton;
  2437. friend class CExtBarMdiDocButton;
  2438. friend class CExtDockBar;
  2439. friend class CExtDockOuterBar;
  2440. friend class CExtToolControlBar;
  2441. friend class CExtMenuControlBar;
  2442. friend class CExtMiniDockFrameWnd;
  2443. friend class CExtBarNcAreaButton;
  2444. friend struct InternalBarRepositionData_t;
  2445. friend class CExtDynControlBar;
  2446. friend class CExtDockDynBar;
  2447. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2448. friend class CExtDockDynTabBar;
  2449. friend class CExtDynTabWnd;
  2450. friend class CExtDynTabControlBar;
  2451. friend class CExtDynAutoHideArea;
  2452. friend class CExtDynAutoHideSlider;
  2453. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2454. friend class InternalDockStateBar;
  2455. friend class InternalDockStateSite;
  2456. friend class InternalFriendlyFrameWnd;
  2457. }; // class CExtControlBar
  2458. #define __EXT_CONTROLBAR_CLASS_NAME _T("ProfUIS-ControlBar")
  2459. #if (!defined __EXT_MFC_NO_DOCK_MARKERS)
  2460. class __PROF_UIS_API CExtDynDockHighlightWnd
  2461. : public CWnd
  2462. , public CExtPmBridge
  2463. {
  2464. public:
  2465. DECLARE_DYNAMIC( CExtDynDockHighlightWnd );
  2466. DECLARE_CExtPmBridge_MEMBERS( CExtDynDockHighlightWnd );
  2467. CExtDynDockHighlightWnd(
  2468. CExtDynDockMarkerWnd * pWndDynDockMarker
  2469. );
  2470. // Attributes
  2471. public:
  2472. CExtDynDockMarkerWnd * m_pWndDynDockMarker;
  2473. CExtBitmap m_bmpHighlightSurface;
  2474. // Overrides
  2475. // ClassWizard generated virtual function overrides
  2476. //{{AFX_VIRTUAL(CExtDynDockHighlightWnd)
  2477. protected:
  2478. virtual BOOL PreCreateWindow( CREATESTRUCT & cs );
  2479. //}}AFX_VIRTUAL
  2480. // Implementation
  2481. public:
  2482. virtual ~CExtDynDockHighlightWnd();
  2483. private:
  2484. static bool g_bDockHighlightClassRegistered;
  2485. static bool RegisterDockHighlightClass();
  2486. // Generated message map functions
  2487. protected:
  2488. //{{AFX_MSG(CExtDynDockHighlightWnd)
  2489. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  2490. afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
  2491. afx_msg void OnPaint();
  2492. //}}AFX_MSG
  2493. DECLARE_MESSAGE_MAP()
  2494. }; // class CExtDynDockHighlightWnd
  2495. #define __EXT_DYNDOCKHIGHLIGHTWND_CLASS_NAME _T("ProfUIS-DynDockHighlightWnd")
  2496. /////////////////////////////////////////////////////////////////////////////
  2497. // CExtDynDockMarkerWnd window
  2498. class __PROF_UIS_API CExtDynDockMarkerWnd
  2499. : public CWnd
  2500. , public CExtPmBridge
  2501. {
  2502. public:
  2503. DECLARE_DYNAMIC( CExtDynDockMarkerWnd );
  2504. DECLARE_CExtPmBridge_MEMBERS( CExtDynDockMarkerWnd );
  2505. CExtDynDockMarkerWnd(
  2506. CExtDynDockMarkerWnd * pWndParentMarker,
  2507. HWND hWndMarkerTarget,
  2508. int eMarkerType,
  2509. const CExtBitmap & _bmpIn,
  2510. const CExtBitmap & _bmpOut,
  2511. HRGN hRgn,
  2512. CRect rcScreen,
  2513. const CExtBitmap * _pBmpOuterBk = NULL,
  2514. int nOffserInnerX = 0,
  2515. int nOffserInnerY = 0,
  2516. bool bSparsedMode = false
  2517. );
  2518. // Attributes
  2519. public:
  2520. bool m_bSparsedMode;
  2521. int m_eMarkerType;
  2522. HWND m_hWndLastHoverDepenentMarker;
  2523. private:
  2524. CExtDynDockHighlightWnd * m_pWndDockHighlight;
  2525. HWND m_hWndMarkerTarget;
  2526. CExtDynDockMarkerWnd * m_pWndParentMarker;
  2527. static CWnd * g_pWndMarkersParent;
  2528. static CTypedPtrArray < CPtrArray, CExtDynDockMarkerWnd * >
  2529. g_arrDockMarkerWndsOuter;
  2530. static CTypedPtrArray < CPtrArray, CExtDynDockMarkerWnd * >
  2531. g_arrDockMarkerWndsInner;
  2532. static HWND g_hWndLastDynamicTarget;
  2533. public:
  2534. CExtControlBar::e_calc_dock_type_t GetCDT();
  2535. int GetMarkerType() const;
  2536. HWND GetMarkerTargetHWND() const;
  2537. static void UnHighlightAllMarkers(
  2538. bool bPassPaintMessages = true
  2539. );
  2540. static void ShowAllMarkers(
  2541. bool bShow = true
  2542. );
  2543. static void DestroyAllMarkers();
  2544. static void DestroyMarkers(
  2545. CTypedPtrArray < CPtrArray, CExtDynDockMarkerWnd * >
  2546. & arrDockMarkerWnds,
  2547. bool bAnimate = true
  2548. );
  2549. static void ShowMarkers(
  2550. CTypedPtrArray < CPtrArray, CExtDynDockMarkerWnd * >
  2551. & arrDockMarkerWnds,
  2552. bool bShow = true,
  2553. bool bAnimate = true
  2554. );
  2555. static void CreateOuterMarkers(
  2556. CFrameWnd * pFrame,
  2557. bool bShow = true,
  2558. CExtPaintManager * pPM = NULL
  2559. );
  2560. // static void CreateInnerMarkers(
  2561. // CFrameWnd * pFrame,
  2562. // bool bShow = true
  2563. // );
  2564. static void CreateDynamicMarkers(
  2565. CFrameWnd * pFrame,
  2566. bool bShow = true,
  2567. CExtPaintManager * pPM = NULL
  2568. );
  2569. static CExtDynDockMarkerWnd * stat_FindMarker(
  2570. HWND hWndMarkerTarget,
  2571. int eMarkerType,
  2572. bool bSparsedMode
  2573. );
  2574. static HWND stat_AnalyzeDynBar(
  2575. CExtDynControlBar * pDynBar,
  2576. CPoint ptCursor
  2577. );
  2578. CExtBitmap m_bmpIn, m_bmpOut, m_bmpOuterBk;
  2579. CPoint m_ptOffsetInner;
  2580. CRgn m_rgn;
  2581. static bool g_bDockMarkerClassRegistered;
  2582. static bool RegisterDockMarkerClass();
  2583. enum eMouseTrackState_t
  2584. {
  2585. __EMTS_UNKNOWN = 0,
  2586. __EMTS_HOVER = 1,
  2587. __EMTS_OUT = 2
  2588. };
  2589. eMouseTrackState_t m_eMTS;
  2590. // Overrides
  2591. // ClassWizard generated virtual function overrides
  2592. //{{AFX_VIRTUAL(CExtDynDockMarkerWnd)
  2593. public:
  2594. virtual BOOL DestroyWindow();
  2595. protected:
  2596. virtual void PostNcDestroy();
  2597. virtual BOOL PreCreateWindow( CREATESTRUCT & cs );
  2598. //}}AFX_VIRTUAL
  2599. // Implementation
  2600. public:
  2601. virtual ~CExtDynDockMarkerWnd();
  2602. bool HighlightMarkerTarget(
  2603. bool bHighlight = true
  2604. );
  2605. bool IsStateApplyable() const;
  2606. bool ShowMarker( 
  2607. bool bShow, 
  2608. bool bAnimate = true 
  2609. );
  2610. void AnimationStart(
  2611. bool bShow
  2612. );
  2613. void AnimationStop();
  2614. bool IsAnimationInProcess() const;
  2615. bool m_bDestroyOnAnimationStop:1;
  2616. protected:
  2617. bool m_bAnimationInProcess:1;
  2618. bool m_bAnimationShow:1;
  2619. int m_nOpaquePercent;
  2620. static void UnHighlightMarkersExcluding(
  2621. CExtDynDockMarkerWnd * pMarkerExclude,
  2622. bool bPassPaintMessages = true
  2623. );
  2624. static void UnHighlightMarkersExcluding(
  2625. CTypedPtrArray < CPtrArray, CExtDynDockMarkerWnd * >
  2626. & arrDockMarkerWnds,
  2627. CExtDynDockMarkerWnd * pMarkerExclude,
  2628. bool bPassPaintMessages = true
  2629. );
  2630. virtual void _RenderImpl( CDC * pDC );
  2631. // Generated message map functions
  2632. protected:
  2633. //{{AFX_MSG(CExtDynDockMarkerWnd)
  2634. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  2635. afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
  2636. afx_msg void OnPaint();
  2637. afx_msg void OnTimer(__EXT_MFC_UINT_PTR nIDEvent);
  2638. //}}AFX_MSG
  2639. afx_msg LRESULT OnPrintClient( WPARAM wParam, LPARAM lParam );
  2640. DECLARE_MESSAGE_MAP()
  2641. friend class CExtDynDockHighlightWnd;
  2642. }; // class CExtDynDockMarkerWnd
  2643. #define __EXT_DYNDOCKMARKER_CLASS_NAME _T("ProfUIS-DynDockMarker")
  2644. #endif // (!defined __EXT_MFC_NO_DOCK_MARKERS)
  2645. #if (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  2646. class CExtDynamicBarSite;
  2647. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2648. class CExtDynamicTabbedControlBar;
  2649. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2650. #if (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
  2651. class CExtTabPageContainerWnd;
  2652. class CExtTabWnd;
  2653. #endif // (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
  2654. /////////////////////////////////////////////////////////////////////////////
  2655. // CExtDynamicBarNcAreaButtonMenu
  2656. class __PROF_UIS_API CExtDynamicBarNcAreaButtonMenu : public CExtBarNcAreaButtonMenu
  2657. {
  2658. public:
  2659. DECLARE_DYNCREATE( CExtDynamicBarNcAreaButtonMenu );
  2660. CExtDynamicBarNcAreaButtonMenu(
  2661. CExtControlBar * pBar = NULL
  2662. );
  2663. virtual bool OnQueryVisibility() const;
  2664. virtual bool OnQueryDeactivateAutohideSlider() const;
  2665. virtual bool OnNcAreaClicked( CPoint point );
  2666. }; // class CExtDynamicBarNcAreaButtonMenu
  2667. /////////////////////////////////////////////////////////////////////////////
  2668. // CExtDynamicBarNcAreaButtonAutoHide
  2669. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2670. class __PROF_UIS_API CExtDynamicBarNcAreaButtonAutoHide : public CExtBarNcAreaButtonAutoHide
  2671. {
  2672. public:
  2673. DECLARE_DYNCREATE( CExtDynamicBarNcAreaButtonAutoHide );
  2674. CExtDynamicBarNcAreaButtonAutoHide(
  2675. CExtControlBar * pBar = NULL
  2676. );
  2677. virtual bool OnNcAreaClicked( CPoint point );
  2678. }; // class CExtDynamicBarNcAreaButtonAutoHide
  2679. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2680. /////////////////////////////////////////////////////////////////////////////
  2681. // CExtDynamicBarNcAreaButtonClose
  2682. class __PROF_UIS_API CExtDynamicBarNcAreaButtonClose : public CExtBarNcAreaButtonClose
  2683. {
  2684. public:
  2685. DECLARE_DYNCREATE( CExtDynamicBarNcAreaButtonClose );
  2686. CExtDynamicBarNcAreaButtonClose(
  2687. CExtControlBar * pBar = NULL
  2688. );
  2689. virtual bool OnNcAreaClicked( CPoint point );
  2690. }; // class CExtDynamicBarNcAreaButtonClose
  2691. /////////////////////////////////////////////////////////////////////////////
  2692. // CExtDynamicControlBar
  2693. class CExtDynamicMDIChildWnd;
  2694. class __PROF_UIS_API CExtDynamicControlBar : public CExtControlBar
  2695. {
  2696. CExtDynamicBarSite * m_pDBS;
  2697. protected:
  2698. bool m_bPersistentBar:1;
  2699. public:
  2700. bool m_bInsertToHeadOfTPC:1;
  2701. static bool g_bInsertToHeadOfTPC;
  2702. DECLARE_SERIAL( CExtDynamicControlBar );
  2703. CExtDynamicControlBar();
  2704. virtual ~CExtDynamicControlBar();
  2705. bool IsPersistentBar() const;
  2706. CExtDynamicBarSite * GetBarSite();
  2707. virtual void PostNcDestroy();
  2708. virtual void OnNcAreaButtonsReinitialize();
  2709. protected:
  2710. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
  2711. public:
  2712. enum eDynamicBarState_t
  2713. {
  2714. __EDBS_FLOATING = 0,
  2715. __EDBS_DOCKED = 1,
  2716. __EDBS_DOCUMENT = 2,
  2717. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2718. __EDBS_AUTO_HIDDEN = 3,
  2719. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2720. };
  2721. virtual eDynamicBarState_t BarStateGet(
  2722. bool * p_bIsVisibleState = NULL
  2723. ) const;
  2724. virtual bool BarStateSet(
  2725. eDynamicBarState_t eDBS,
  2726. bool bShow
  2727. );
  2728. UINT m_nMdiMenuResourceID, m_nMdiAccelTableResourceID;
  2729. CExtSafeString m_strCaptionText;
  2730. CExtCmdIcon m_icon;
  2731. virtual void OnGetBarCaptionText(
  2732. e_bar_caption_text_t eBCT,
  2733. CExtSafeString & strCaptionText
  2734. ) const;
  2735. virtual bool NcButtons_HandleClick(
  2736. CExtBarNcAreaButton * pNcAreaButton,
  2737. CPoint point,
  2738. CExtControlBar * pBarEventSource,
  2739. CExtControlBar * pBarActiveInContainer
  2740. );
  2741. virtual void NcButtons_PostClick(
  2742. CExtBarNcAreaButton * pNcAreaButton,
  2743. CPoint point,
  2744. CExtControlBar * pBarEventSource,
  2745. CExtControlBar * pBarActiveInContainer
  2746. );
  2747. private:
  2748. enum eAdditionalStateFlags_t
  2749. {
  2750. __EASF_INIT_VALUE = 0,
  2751. __EASF_INVISIBLE = 0x00000001,
  2752. }; // enum eAdditionalStateFlags_t
  2753. mutable DWORD m_dwAdditionalStateFlags;
  2754. mutable eDynamicBarState_t m_eDBS;
  2755. HWND m_hWndChildCached;
  2756. public:
  2757. mutable eDynamicBarState_t m_eHelperSwitchingDBS;
  2758. mutable bool m_bHelperSwitchingIntoVisibleState:1;
  2759. virtual bool OnQueryUseCheckMarkCommand();
  2760. virtual bool OnInitDbsMenu(
  2761. CExtPopupMenuWnd * pPopup,
  2762. HWND hWndTrack,
  2763. CObject * pHelperSrc,
  2764. LPARAM lParamHelper = 0
  2765. );
  2766. protected:
  2767. virtual bool _CanDockToTabbedContainers(
  2768. CExtControlBar * pDestBar
  2769. ) const;
  2770. virtual bool _CanDockLTRB(
  2771. CExtControlBar * pDestBar
  2772. ) const;
  2773.     virtual void _DraggingUpdateState(
  2774. const CPoint & point,
  2775. bool bForceFloatMode
  2776. );
  2777. virtual CExtDynamicMDIChildWnd * OnCreateDynamicMDIChildWndInstance();
  2778. virtual void OnMoveChildToDocument();
  2779. virtual void OnMoveChildToBar();
  2780. public:
  2781. virtual void PmBridge_OnPaintManagerChanged(
  2782. CExtPaintManager * pGlobalPM
  2783. );
  2784. virtual HWND OnQueryChildHWND();
  2785. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2786. // switch to/restore from autohide mode
  2787. virtual bool AutoHideModeSet(
  2788. bool bAutoHideMode,
  2789. bool bAnimate,
  2790. bool bRecalcLayout,
  2791. bool bForceNoShow
  2792. );
  2793. virtual bool OnQueryVisibilityInAutoHideTabs() const;
  2794. virtual bool OnQueryVisibilityInContainerTabs() const;
  2795. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2796. virtual void OnSerializeDynamicProps( CArchive & ar );
  2797. protected:
  2798. virtual void OnExtBarStateSerializationComplete(
  2799. bool bStore
  2800. );
  2801. public:
  2802. virtual bool OnInsertDynamicBarCommandIntoPopupMenu(
  2803. CExtPopupMenuWnd * pPopup,
  2804. INT nInsertPos
  2805. );
  2806. friend class CExtDynamicBarNcAreaButtonMenu;
  2807. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2808. friend class CExtDynamicBarNcAreaButtonAutoHide;
  2809. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2810. friend class CExtDynamicBarNcAreaButtonClose;
  2811. friend class CExtDynamicBarSite;
  2812. }; // class CExtDynamicControlBar
  2813. /////////////////////////////////////////////////////////////////////////////
  2814. // CExtDynamicMDIChildWnd
  2815. class __PROF_UIS_API CExtDynamicMDIChildWnd
  2816. : public CMDIChildWnd
  2817. {
  2818. CExtDynamicBarSite * m_pDBS;
  2819. CExtDynamicControlBar * m_pBar;
  2820. HWND m_hWndHelperBar;
  2821. public:
  2822. DECLARE_DYNAMIC( CExtDynamicMDIChildWnd );
  2823. CExtCmdIcon m_icon;
  2824. CExtDynamicMDIChildWnd(
  2825. CExtDynamicControlBar * pBar = NULL
  2826. );
  2827. virtual ~CExtDynamicMDIChildWnd();
  2828. virtual void PostNcDestroy();
  2829. CExtDynamicControlBar * GetBar();
  2830. void AttachBar( CExtDynamicControlBar * pBar );
  2831. CExtDynamicBarSite * GetBarSite();
  2832. // virtual BOOL PreTranslateMessage(MSG* pMsg);
  2833. virtual BOOL OnCmdMsg(
  2834. UINT nID,
  2835. int nCode,
  2836. void * pExtra,
  2837. AFX_CMDHANDLERINFO * pHandlerInfo
  2838. );
  2839. protected:
  2840. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  2841. virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam );
  2842. public:
  2843. virtual BOOL DestroyWindow();
  2844. }; // class CExtDynamicMDIChildWnd
  2845. /////////////////////////////////////////////////////////////////////////////
  2846. // CExtDynamicBarHookSink
  2847. class __PROF_UIS_API CExtDynamicBarHookSink : public CExtHookSink
  2848. {
  2849. CExtDynamicBarSite * m_pDBS;
  2850. public:
  2851. CExtDynamicBarHookSink();
  2852. virtual ~CExtDynamicBarHookSink();
  2853. CFrameWnd * DockSiteGet();
  2854. CExtDynamicBarSite * GetBarSite();
  2855. protected:
  2856. virtual bool OnHookWndMsg(
  2857. LRESULT & lResult,
  2858. HWND hWndHooked,
  2859. UINT nMessage,
  2860. WPARAM & wParam,
  2861. LPARAM & lParam
  2862. );
  2863. virtual bool OnPreparePopupMenu( CExtPopupMenuWnd * pPopup );
  2864. friend class CExtDynamicBarSite;
  2865. }; // class CExtDynamicBarHookSink
  2866. /////////////////////////////////////////////////////////////////////////////
  2867. // CExtDynamicBarSite
  2868. class __PROF_UIS_API CExtDynamicBarSite
  2869. {
  2870. CFrameWnd * m_pDockSite;
  2871. CTypedPtrMap < CMapPtrToPtr, CExtDynamicControlBar *, CWnd * > m_mapBars;
  2872. CTypedPtrList < CPtrList, CExtDynamicControlBar * > m_listBars, m_listBarsInDocMode;
  2873. static const UINT g_nMsgFindDynamicBarSite;
  2874. CExtDynamicBarHookSink m_DbsHookSink;
  2875. public:
  2876. UINT m_nBarListInMenusCmdID;
  2877. CExtDynamicBarSite();
  2878. virtual ~CExtDynamicBarSite();
  2879. static CExtDynamicBarSite * FindBarSite(
  2880. HWND hWnd
  2881. );
  2882. static CExtDynamicBarSite * FindBarSite(
  2883. CWnd * pWnd
  2884. );
  2885. HWND GetActiveMdiChildFrameHWND(
  2886. bool * p_bMaximized = NULL,
  2887. CMDIChildWnd ** ppMDIChildWnd = NULL
  2888. );
  2889. CFrameWnd * DockSiteGet();
  2890. const CFrameWnd * DockSiteGet() const;
  2891. void Install( CFrameWnd * pDockSite );
  2892. virtual BOOL OnCmdMsg(
  2893. UINT nID,
  2894. int nCode,
  2895. void * pExtra,
  2896. AFX_CMDHANDLERINFO * pHandlerInfo
  2897. );
  2898. virtual BOOL OnCmdMsgOneBar(
  2899. CExtDynamicControlBar * pBar,
  2900. int nCode,
  2901. void * pExtra,
  2902. AFX_CMDHANDLERINFO * pHandlerInfo
  2903. );
  2904. virtual CExtDynamicMDIChildWnd * OnDbsCreateDynamicMDIChildWndInstance(
  2905. CExtDynamicControlBar * pBar
  2906. );
  2907. virtual bool OnDbsQueryUseCheckMarkCommand(
  2908. CExtDynamicControlBar * pBar
  2909. );
  2910. #if (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
  2911. virtual bool OnTabPageContainerClickedButton(
  2912. LONG nHitTest,
  2913. bool bButtonPressed,
  2914. INT nMouseButton, // MK_... values
  2915. UINT nMouseEventFlags
  2916. );
  2917. #endif // (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
  2918. virtual bool OnPreparePopupMenu( CExtPopupMenuWnd * pPopup );
  2919. virtual INT OnPrepareBarsListInMenu(
  2920. CExtPopupMenuWnd * pPopup,
  2921. INT nInsertPos
  2922. );
  2923. virtual UINT OnDbsAllocNewBarCommandID(
  2924. __EXT_MFC_SAFE_LPCTSTR strCaptionText,
  2925. const CExtCmdIcon & icon,
  2926. UINT nDesiredCmdID = 0
  2927. ) const;
  2928. virtual void OnDbsFreeBarCommandID( UINT nCmdID ) const;
  2929. virtual void OnDbsResetPageSequence();
  2930. protected:
  2931. virtual CExtDynamicControlBar * OnDbsCreateNewBarInstance() const;
  2932. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2933. virtual CExtDynamicTabbedControlBar * OnDbsCreateTabbedBarInstance() const;
  2934. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  2935. // CExtDynamicControlBar * BarFindAnyVisible();
  2936. public:
  2937. CExtDynamicControlBar * BarFindByChildHWND( HWND hWndChildToFind );
  2938. CExtDynamicControlBar * BarAlloc(
  2939. __EXT_MFC_SAFE_LPCTSTR strCaptionText,
  2940. const CExtCmdIcon & icon,
  2941. UINT nDesiredCmdID = 0,
  2942. CRuntimeClass * pDesiredRTC = NULL,
  2943. bool bPersistentBar = false
  2944. );
  2945. void BarFree( CExtDynamicControlBar * pBar );
  2946. void BarFreeAll(
  2947. bool bFreePersistentBars = true,
  2948. bool bFreeDynamicBars = true
  2949. );
  2950. CExtDynamicControlBar * BarGetByCmdID( UINT nLookupCmdID );
  2951. void BarEnumGetArray(
  2952. CTypedPtrArray < CPtrArray, CExtDynamicControlBar * > & arrAllDynamicBars,
  2953. bool bIncludePersistentBars = true,
  2954. bool bIncludeDynamicBars = true
  2955. );
  2956. INT BarEnumGetCount(
  2957. bool bIncludePersistentBars = true,
  2958. bool bIncludeDynamicBars = true
  2959. ) const;
  2960. POSITION BarEnumGetStartPosition() const;
  2961. CExtDynamicControlBar * BarEnumGetNext(
  2962. POSITION & pos,
  2963. bool bIncludePersistentBars = true,
  2964. bool bIncludeDynamicBars = true
  2965. );
  2966. const CExtDynamicControlBar * BarEnumGetNext(
  2967. POSITION & pos,
  2968. bool bIncludePersistentBars = true,
  2969. bool bIncludeDynamicBars = true
  2970. ) const;
  2971. public:
  2972. virtual bool StateSerialize(
  2973. CArchive & ar,
  2974. bool bEnableThrowExceptions = false
  2975. );
  2976. bool StateLoad(
  2977. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  2978. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  2979. __EXT_MFC_SAFE_LPCTSTR sSectionNameProfile, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%%sSectionNameProfile%
  2980. HKEY hKeyRoot = HKEY_CURRENT_USER,
  2981. bool bEnableThrowExceptions = false
  2982. );
  2983. bool StateSave(
  2984. __EXT_MFC_SAFE_LPCTSTR sSectionNameCompany, // under HKEY_CURRENT_USERSoftware
  2985. __EXT_MFC_SAFE_LPCTSTR sSectionNameProduct, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%
  2986. __EXT_MFC_SAFE_LPCTSTR sSectionNameProfile, // under HKEY_CURRENT_USERSoftware%sSectionNameCompany%%sSectionNameProfile%
  2987. HKEY hKeyRoot = HKEY_CURRENT_USER,
  2988. bool bEnableThrowExceptions = false
  2989. );
  2990. protected:
  2991. void _BarFreeAllImpl(
  2992. bool bForceNoOptimizeMode,
  2993. bool bFreePersistentBars = true,
  2994. bool bFreeDynamicBars = true
  2995. );
  2996. void _BarFreeImpl(
  2997. CExtDynamicControlBar * pBar,
  2998. bool bForceFloatMode,
  2999. bool bForceNoOptimizeMode
  3000. );
  3001. public:
  3002. enum eDetectedUiType_t
  3003. {
  3004. __EDUIT_UNSUPPORTED_ENVIRONMENT = 0, // UI is not compatible with dynamic bar site
  3005. __EDUIT_MDI_ORDINARY = 1, // simple MDI
  3006. __EDUIT_MDI_WITH_TABS = 2, // MDI with tabs
  3007. __EDUIT_SDI_TAB_PAGE_CONTAINER = 3, // SDI with tab page container
  3008. __EDUIT_NOT_DETECTED_YET = 4, // for internal use only
  3009. __EDUIT_VALID_VALUE_MIN = 0, // for internal use only
  3010. __EDUIT_VALID_VALUE_MAX = 3, // for internal use only
  3011. __EDUIT_DETECTED_VALUE_MIN = 1, // for internal use only
  3012. __EDUIT_DETECTED_VALUE_MAX = 3, // for internal use only
  3013. }; // enum eDetectedUiType_t
  3014. private:
  3015. mutable eDetectedUiType_t m_eDUIT;
  3016. #if (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
  3017. mutable CExtTabPageContainerWnd * m_pWndTabPageContainer;
  3018. #endif // (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
  3019. #if (!defined __EXT_MFC_NO_TABMDI_CTRL)
  3020. mutable CExtTabWnd * m_pWndMdiTabs;
  3021. #endif // (!defined __EXT_MFC_NO_TABMDI_CTRL)
  3022. mutable HWND m_hWndMdiClient;
  3023. public:
  3024. virtual eDetectedUiType_t GetDetectedUiType() const;
  3025. #if (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
  3026. CExtTabPageContainerWnd * GetTabPageContainer();
  3027. const CExtTabPageContainerWnd * GetTabPageContainer() const;
  3028. #endif // (!defined __EXT_MFC_NO_TAB_PAGECONTAINER_CTRL)
  3029. #if (!defined __EXT_MFC_NO_TABMDI_CTRL)
  3030. CExtTabWnd * GetMdiTabs();
  3031. const CExtTabWnd * GetMdiTabs() const;
  3032. #endif // (!defined __EXT_MFC_NO_TABMDI_CTRL)
  3033. HWND GetMdiClient() const;
  3034. friend class CExtDynamicControlBar;
  3035. friend class CExtDynamicBarHookSink;
  3036. }; // class CExtDynamicBarSite
  3037. #endif // (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  3038. /////////////////////////////////////////////////////////////////////////////
  3039. //{{AFX_INSERT_LOCATION}}
  3040. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  3041. #endif // __EXT_CONTROLBAR_H