XTPTabClientWnd.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:54k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPTabClientWnd.h : interface for the CXTPTabClientWnd class.
  2. //
  3. // This file is a part of the XTREME COMMANDBARS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__TABCLIENTWNDEX_H__)
  22. #define __TABCLIENTWNDEX_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTPControlButton.h"
  28. //-----------------------------------------------------------------------
  29. // Summary:
  30. //     The WM_XTP_PRETRANSLATEMOUSEMSG message is sent to owner window to
  31. //     pre-translate mouse messages.
  32. // Parameters:
  33. //     point  - CPoint((DWORD)lParam) - mouse cursor position
  34. //     wParam - mouse notification.
  35. // Returns:
  36. //     If the application is to process this message, the return value
  37. //     should be TRUE.
  38. // Example:
  39. //     Here is an example of how an application would process the WM_XTP_PRETRANSLATEMOUSEMSG
  40. //     message.
  41. // <code>
  42. // BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
  43. //     //{{AFX_MSG_MAP(CMainFrame)
  44. //     ON_MESSAGE(WM_XTP_PRETRANSLATEMOUSEMSG, OnTabbarMouseMsg)
  45. //     //}}AFX_MSG_MAP
  46. // END_MESSAGE_MAP()
  47. //
  48. // LRESULT CMainFrame::OnTabbarMouseMsg(WPARAM wParam, LPARAM lParam)
  49. // {
  50. //     CPoint point = CPoint((DWORD)lParam);
  51. //
  52. //     CXTPTabManagerItem* pItem =  m_MTIClientWnd.HitTest(point);
  53. //
  54. //     if (pItem)
  55. //     {
  56. //          if (wParam == WM_RBUTTONDOWN)
  57. //          {
  58. //
  59. //              CWnd* pFrame = CWnd::FromHandle(pItem->GetHandle());
  60. //              MDIActivate(pFrame);
  61. //
  62. //              m_MTIClientWnd.Refresh();
  63. //
  64. //              CMenu menuPopup;
  65. //              VERIFY(menuPopup.LoadMenu(IDR_WORKSPACE_POPUP));
  66. //
  67. //              m_MTIClientWnd.WorkspaceToScreen(&point);
  68. //              CXTPCommandBars::TrackPopupMenu(menuPopup.GetSubMenu(0), 0, point.x, point.y, this);
  69. //
  70. //              m_MTIClientWnd.Refresh();
  71. //
  72. //              return TRUE;
  73. //          }
  74. //      }
  75. //
  76. //      return FALSE;
  77. // }
  78. // </code>
  79. // See Also: CXTPTabClientWnd
  80. //-----------------------------------------------------------------------
  81. const UINT WM_XTP_PRETRANSLATEMOUSEMSG = (WM_XTP_COMMANDBARS_BASE + 20);
  82. //-----------------------------------------------------------------------
  83. // Summary:
  84. //     The WM_XTP_GETWINDOWTEXT message is sent to MDI child window to retrieve text will be used for
  85. //     tabbed interface.
  86. // Remarks:
  87. //     If application returns 0, CDocument::GetTitle will be used. You can override
  88. //     CXTPTabClientWnd::GetItemText instead of process the message.
  89. // Returns:
  90. //     Points to a null-terminated string that specifies the text to be used.
  91. // Example:
  92. //     Here is an example of how an application would process the WM_XTP_GETWINDOWTEXT
  93. //     message.
  94. // <code>
  95. // BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
  96. //     //{{AFX_MSG_MAP(CChildFrame)
  97. //     ON_MESSAGE(WM_XTP_GETWINDOWTEXT, OnGetTabText)
  98. //     //}}AFX_MSG_MAP
  99. // END_MESSAGE_MAP()
  100. //
  101. // LRESULT CChildFrame::OnGetTabText(WPARAM /*wParam*/, LPARAM /*lParam*/)
  102. // {
  103. //     return (LPCTSTR)m_strCaption;
  104. // }
  105. // </code>
  106. // See Also: CXTPTabClientWnd, WM_XTP_GETTABICON, WM_XTP_GETWINDOWTOOLTIP
  107. //-----------------------------------------------------------------------
  108. const UINT WM_XTP_GETWINDOWTEXT = (WM_XTP_COMMANDBARS_BASE + 21);
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     The WM_XTP_GETWINDOWTOOLTIP message is sent to MDI child window to retrieve tooltips for CXTPTabClientWnd's tabs.
  112. // Remarks:
  113. //     You must call CXTPTabClientWnd::EnableToolTips to enable tooltips.
  114. // Returns:
  115. //     Points to a null-terminated string that specifies the tooltip to be used. <p/>
  116. //     If application returns 0, CDocument::GetPathName will be used.
  117. // Example:
  118. //     Here is an example of how an application would process the WM_XTP_GETWINDOWTOOLTIP
  119. //     message.
  120. // <code>
  121. // BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
  122. //     //{{AFX_MSG_MAP(CChildFrame)
  123. //     ON_MESSAGE(WM_XTP_GETWINDOWTOOLTIP, OnGetTabTip)
  124. //     //}}AFX_MSG_MAP
  125. // END_MESSAGE_MAP()
  126. //
  127. // LRESULT CChildFrame::OnGetTabTip(WPARAM /*wParam*/, LPARAM /*lParam*/)
  128. // {
  129. //     return (LPCTSTR)m_strToolTip;
  130. // }
  131. // </code>
  132. // See Also: CXTPTabClientWnd, WM_XTP_GETTABICON, WM_XTP_GETWINDOWTEXT
  133. //-----------------------------------------------------------------------
  134. const UINT WM_XTP_GETWINDOWTOOLTIP = (WM_XTP_COMMANDBARS_BASE + 23);
  135. //-----------------------------------------------------------------------
  136. // Summary:
  137. //     The WM_XTP_NEWTABITEM message is sent to owner window when new tab was created
  138. // Parameters:
  139. //     pNewItem - (CXTPTabManagerItem*)wParam. Pointer to tab was created.
  140. // Example:
  141. //     Here is an example of how an application would process the WM_XTP_NEWTABITEM
  142. //     message.
  143. // <code>
  144. // BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
  145. //     //{{AFX_MSG_MAP(CMainFrame)
  146. //     ON_MESSAGE(WM_XTP_NEWTABITEM, OnTabbarNewItem)
  147. //     //}}AFX_MSG_MAP
  148. // END_MESSAGE_MAP()
  149. //
  150. // LRESULT CMainFrame::OnTabbarNewItem(WPARAM wParam, LPARAM /*lParam*/)
  151. // {
  152. //     CXTPTabManagerItem* pItem = (CXTPTabManagerItem*)wParam;
  153. //     return 0;
  154. // }
  155. // </code>
  156. // See Also: CXTPTabClientWnd
  157. //-----------------------------------------------------------------------
  158. const UINT WM_XTP_NEWTABITEM = (WM_XTP_COMMANDBARS_BASE + 24);
  159. //-----------------------------------------------------------------------
  160. // Summary:
  161. //     Workspace buttons enumerator, used to indicate which tab navigation
  162. //     buttons to display in the TabWorkspace.
  163. // Example:
  164. //     <code>m_MTIClientWnd.SetFlags(xtpWorkspaceHideClose);</code>
  165. // See Also: CXTPTabClientWnd::SetFlags
  166. //
  167. // <KEYWORDS xtpWorkspaceHideArrows, xtpWorkspaceHideClose, xtpWorkspaceHideAll>
  168. //-----------------------------------------------------------------------
  169. enum XTPWorkspaceButtons
  170. {
  171. xtpWorkspaceHideArrows = 1,             // To hide arrow buttons.
  172. xtpWorkspaceHideClose = 2,              // To hide close button.
  173. xtpWorkspaceHideAll = 3,                // To hide arrow and close buttons.
  174. xtpWorkspaceShowActiveFiles = 4,        // To show active file button.
  175. xtpWorkspaceHideArrowsAlways = 1 + 8,   // To hide arrow buttons always
  176. xtpWorkspaceShowCloseTab = 16,          // To show close button for all tabs.
  177. xtpWorkspaceShowCloseSelectedTab = 32,  // To show close button for selected tabs.
  178. };
  179. //-----------------------------------------------------------------------
  180. // Summary:
  181. //     XTPWorkspaceNewTabPosition enumerator, used to determine where new tab will appear
  182. // Example:
  183. //     <code>m_MTIClientWnd.SetNewTabPosition(xtpWorkspaceNewTabLeftMost);</code>
  184. // See Also: CXTPTabClientWnd::SetNewTabPosition
  185. //
  186. // <KEYWORDS xtpWorkspaceNewTabRightMost, xtpWorkspaceNewTabLeftMost, xtpWorkspaceNewTabNextToActive>
  187. //-----------------------------------------------------------------------
  188. enum XTPWorkspaceNewTabPosition
  189. {
  190. xtpWorkspaceNewTabRightMost,             // New tab will be created after all tabs
  191. xtpWorkspaceNewTabLeftMost,              // New tab will be created before all tabs
  192. xtpWorkspaceNewTabNextToActive           // New tab will be created after active tab
  193. };
  194. //-----------------------------------------------------------------------
  195. // Summary:
  196. //     XTPWorkspaceActivateTab enumerator, used to determine which tab will
  197. //      become active after the currently active tab is closed.
  198. // See Also: CXTPTabClientWnd.SetAfterCloseActiveTab
  199. //
  200. // <KEYWORDS xtpWorkspaceActivateNextToClosed, xtpWorkspaceActivateTopmost>
  201. //-----------------------------------------------------------------------
  202. enum XTPWorkspaceActivateTab
  203. {
  204. xtpWorkspaceActivateNextToClosed,       // Activate tab next to the closed tab.
  205. xtpWorkspaceActivateTopmost             // Activate the left-most tab.
  206. };
  207. //{{AFX_CODEJOCK_PRIVATE
  208. class CXTPTabPaintManager;
  209. class CXTPCommandBars;
  210. class CXTPMDIFrameWnd;
  211. class CXTPToolTipContext;
  212. //}}AFX_CODEJOCK_PRIVATE
  213. //===========================================================================
  214. // Summary:
  215. //     CXTPTabClientWnd is a CWnd derived class. It represents a tabbed
  216. //     workspace.
  217. //===========================================================================
  218. class _XTP_EXT_CLASS CXTPTabClientWnd : public CWnd, public CXTPTabManagerAtom
  219. {
  220. //{{AFX_CODEJOCK_PRIVATE
  221. DECLARE_DYNAMIC(CXTPTabClientWnd)
  222. protected:
  223. class CTabClientDropTarget;
  224. class CNavigateButtonActiveFiles;
  225. //}}AFX_CODEJOCK_PRIVATE
  226. public:
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     CWorkspace is a CXTPTabManager derived class. internal used.
  230. //-----------------------------------------------------------------------
  231. class _XTP_EXT_CLASS CWorkspace : public CXTPTabManager
  232. {
  233. public:
  234. //-----------------------------------------------------------------------
  235. // Summary:
  236. //     Constructs a CWorkspace object
  237. //-----------------------------------------------------------------------
  238. CWorkspace();
  239. //-----------------------------------------------------------------------
  240. // Summary:
  241. //     Destroys a CWorkspace object, handles cleanup and deallocation.
  242. //-----------------------------------------------------------------------
  243. virtual ~CWorkspace();
  244. protected:
  245. //-----------------------------------------------------------------------
  246. // Summary:
  247. //     Retrieves the paint manager.
  248. // Returns:
  249. //     A pointer to a CXTPTabPaintManager object.
  250. //-----------------------------------------------------------------------
  251. virtual CXTPTabPaintManager* GetPaintManager() const;
  252. //-----------------------------------------------------------------------
  253. // Summary:
  254. //     This member is called when a tab navigation button is clicked.
  255. // Parameters:
  256. //     pButton - the tab navigation button that was clicked.
  257. //-----------------------------------------------------------------------
  258. virtual void OnNavigateButtonClick(CXTPTabManagerNavigateButton* pButton);
  259. //-----------------------------------------------------------------------
  260. // Summary:
  261. //     This member is called when a tab button is clicked.  This
  262. //     will select the tab that was clicked.
  263. // Parameters:
  264. //     pItem - Pointer to the CXTPTabManagerItem tab that was clicked.
  265. //-----------------------------------------------------------------------
  266. virtual void OnItemClick(CXTPTabManagerItem* pItem);
  267. //-----------------------------------------------------------------------
  268. // Summary:
  269. //     This method is called before item click
  270. // Parameters:
  271. //     pItem - Pointer to item is about to be clicked
  272. // Returns:
  273. //     TRUE if cancel process
  274. //-----------------------------------------------------------------------
  275. virtual BOOL OnBeforeItemClick(CXTPTabManagerItem* pItem);
  276. //-----------------------------------------------------------------------
  277. // Summary:
  278. //     This member recalculates the layout of the tab manager and
  279. //     then repositions itself.  This member must be overridden in
  280. //     derived classes.
  281. //-----------------------------------------------------------------------
  282. virtual void Reposition();
  283. //-----------------------------------------------------------------------
  284. // Summary:
  285. //     This member is called when the icon of the tab needs to be
  286. //     drawn.
  287. // Parameters:
  288. //     pDC    - Pointer to the destination device context.
  289. //     pt     - Specifies the location of the image.
  290. //     pItem  - CXTPTabManagerItem object to draw icon on.
  291. //     bDraw  - TRUE if the icon needs to be drawn, I.e. the icon size
  292. //              changed.  FALSE if the icon does not need to be
  293. //              drawn or redrawn.
  294. //     szIcon - Size of the tab icon.
  295. // Remarks:
  296. //     For example, on mouseover.  This member is overridden by its
  297. //     descendants.  This member must be overridden in
  298. //     derived classes.
  299. // Returns:
  300. //     TRUE if the icon was successfully drawn, FALSE if the icon
  301. //     was not drawn.
  302. //-----------------------------------------------------------------------
  303. virtual BOOL DrawIcon(CDC* pDC, CPoint pt, CXTPTabManagerItem* pItem, BOOL bDraw, CSize& szIcon) const;
  304. //-----------------------------------------------------------------------
  305. // Summary:
  306. //     Initiates redrawing of the control
  307. // Remarks:
  308. //     Call this member function if you want to initialize redrawing
  309. //     of the control. The control will be redrawn taking into account
  310. //     its latest state.
  311. // Parameters:
  312. //     lpRect - The rectangular area of the window that is invalid.
  313. //     bAnimate - TRUE to animate changes in bounding rectangle.
  314. //-----------------------------------------------------------------------
  315. virtual void RedrawControl(LPCRECT lpRect, BOOL bAnimate);
  316. //-----------------------------------------------------------------------
  317. // Summary:
  318. //     Call this member to select the specified item.
  319. // Parameters:
  320. //     pItem - Points to a CXTPTabManagerItem object.
  321. //-----------------------------------------------------------------------
  322. virtual void SetSelectedItem(CXTPTabManagerItem* pItem);
  323. //-----------------------------------------------------------------------
  324. // Summary:
  325. //     This member is called when a CXTPTabManagerItem is clicked
  326. //     and dragged within the tab header.  This will reorder the
  327. //     selected tab to the location it is dragged to.
  328. // Parameters:
  329. //     hWnd  - Handle to the CWnd object beneath the mouse cursor.
  330. //     pt - CPoint object specifies xy coordinates.
  331. //     pItem - Points to a CXTPTabManagerItem object
  332. //-----------------------------------------------------------------------
  333. virtual void ReOrder(HWND hWnd, CPoint pt, CXTPTabManagerItem* pItem);
  334. //-----------------------------------------------------------------------
  335. // Summary:
  336. //     Checks to see if the mouse is locked.
  337. // Returns:
  338. //     TRUE if locked; otherwise returns FALSE.
  339. //-----------------------------------------------------------------------
  340. virtual BOOL IsMouseLocked() const;
  341. //-----------------------------------------------------------------------
  342. // Summary:
  343. //     Returns the tooltip associated with the specified item.
  344. // Parameters:
  345. //     pItem - Points to a CXTPTabManagerItem object.
  346. // Returns:
  347. //     Associated tooltip
  348. //-----------------------------------------------------------------------
  349. virtual CString GetItemTooltip(const CXTPTabManagerItem* pItem) const;
  350. //-----------------------------------------------------------------------
  351. // Summary:
  352. //     Returns whether or not reorder is allowed.
  353. // Returns:
  354. //     TRUE when reorder is allowed; FALSE otherwise.
  355. //-----------------------------------------------------------------------
  356. virtual BOOL IsAllowReorder() const;
  357. //-----------------------------------------------------------------------
  358. // Summary:
  359. //     Allows/disallows reorder.
  360. // Parameters:
  361. //     bAllowReorder - TRUE for allowing reorder; FALSE for disallowing.
  362. //-----------------------------------------------------------------------
  363. virtual void SetAllowReorder(BOOL bAllowReorder);
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     Determines if frame must be drawn.
  367. //-----------------------------------------------------------------------
  368. virtual BOOL IsDrawStaticFrame() const;
  369. //-----------------------------------------------------------------------
  370. // Summary:
  371. //     This method is called to get window handle of workspace
  372. //-----------------------------------------------------------------------
  373. virtual CWnd* GetWindow() const;
  374. protected:
  375. //-----------------------------------------------------------------------
  376. // Summary:
  377. //     Finds the tab item that corresponds to the specified window
  378. // Parameters:
  379. //     hWnd - Handle of MDI child window to find.
  380. // Returns:
  381. //     Returns a pointer to the specified tab if it was found.
  382. //-----------------------------------------------------------------------
  383. CXTPTabManagerItem* FindItem(const HWND hWnd) const;
  384. //-----------------------------------------------------------------------
  385. // Summary:
  386. //     Adds new tab item for the specified window
  387. // Parameters:
  388. //     pChildWnd - Pointer to MDI child window to add.
  389. // Returns:
  390. //     Returns a pointer to the newly added tab.
  391. //-----------------------------------------------------------------------
  392. CXTPTabManagerItem* AddItem(const CWnd* pChildWnd);
  393. //-----------------------------------------------------------------------
  394. // Summary:
  395. //     This member function gets the index for the current icon.
  396. // Parameters:
  397. //     pItem - Pointer to a CXTPTabManagerItem.
  398. // Returns:
  399. //     An icon index for the current item.
  400. //-----------------------------------------------------------------------
  401. HICON GetItemIcon(const CXTPTabManagerItem* pItem) const;
  402. //-----------------------------------------------------------------------
  403. // Summary:
  404. //     This member function returns the RGB value for the referenced
  405. //     item text or (COLORREF)-1, if the color was not set.
  406. // Parameters:
  407. //     pItem - Pointer to a CXTPTabManagerItem.
  408. // Returns:
  409. //     The RGB value for the referenced item text, or (COLORREF)-1,
  410. //     if the color was not set
  411. //-----------------------------------------------------------------------
  412. COLORREF GetItemColor(const CXTPTabManagerItem* pItem) const;
  413. //-------------------------------------------------------------------------
  414. // Summary:
  415. //     This method is called to recalculate layout of tab client
  416. //-------------------------------------------------------------------------
  417. virtual void OnRecalcLayout();
  418. protected:
  419. CXTPTabClientWnd* m_pTabClientWnd;  // Parent tabbed client.
  420. double m_dHeight;                   // Height of the workspace
  421. CRect m_rcSplitter;                 // Splitter position.
  422. friend class CXTPTabClientWnd;
  423. };
  424. //===========================================================================
  425. // Summary:
  426. //     CSingleWorkspace is a CWorkspace derived class. internal used.
  427. //===========================================================================
  428. class _XTP_EXT_CLASS CSingleWorkspace : public CWnd, public CWorkspace
  429. {
  430. public:
  431. //-------------------------------------------------------------------------
  432. // Summary:
  433. //     Destroys a CSingleWorkspace object, handles cleanup and deallocation
  434. //-------------------------------------------------------------------------
  435. ~CSingleWorkspace();
  436. //-----------------------------------------------------------------------
  437. // Summary:
  438. //     Initiates redrawing of the control
  439. // Parameters:
  440. //     lpRect - The rectangular area of the window that is invalid.
  441. //     bAnimate - TRUE to animate changes in bounding rectangle.
  442. // Remarks:
  443. //     Call this member function if you want to initialize redrawing
  444. //     of the control. The control will be redrawn taking into account
  445. //     its latest state.
  446. //-----------------------------------------------------------------------
  447. virtual void RedrawControl(LPCRECT lpRect, BOOL bAnimate);
  448. protected:
  449. //-----------------------------------------------------------------------
  450. // Summary:
  451. //     The framework calls this member function to determine whether a
  452. //     point is in the bounding rectangle of the specified tool.
  453. // Parameters:
  454. //     point - Specifies the x- and y-coordinate of the cursor. These
  455. //             coordinates are always relative to the upper-left corner of the window
  456. //     pTI   - A pointer to a TOOLINFO structure.
  457. // Returns:
  458. //     If the tooltip control was found, the window control ID. If
  459. //     the tooltip control was not found, -1.
  460. //-----------------------------------------------------------------------
  461. INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  462. //-----------------------------------------------------------------------
  463. // Summary:
  464. //     This method is called to get window handle of workspace
  465. //-----------------------------------------------------------------------
  466. virtual CWnd* GetWindow() const;
  467. //{{AFX_CODEJOCK_PRIVATE
  468. DECLARE_MESSAGE_MAP()
  469. virtual BOOL PreTranslateMessage(MSG* pMsg);
  470. BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  471. //{{AFX_MSG(CSingleWorkspace)
  472. public:
  473. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  474. afx_msg void OnPaint();
  475. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM lParam);
  476. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  477. afx_msg void OnMouseLeave();
  478. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  479. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  480. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  481. //}}AFX_MSG
  482. //}}AFX_CODEJOCK_PRIVATE
  483. };
  484. public:
  485. //-----------------------------------------------------------------------
  486. // Summary:
  487. //     Constructs a CXTPTabClientWnd object
  488. //-----------------------------------------------------------------------
  489. CXTPTabClientWnd();
  490. //-----------------------------------------------------------------------
  491. // Summary:
  492. //     Destroys a CXTPTabClientWnd object, handles cleanup and deallocation.
  493. //-----------------------------------------------------------------------
  494. virtual ~CXTPTabClientWnd();
  495. public:
  496. //-----------------------------------------------------------------------
  497. // Summary:
  498. //     Attaches the tabbed workspace.
  499. // Parameters:
  500. //     pParentFrame - Points to a CMDIFrameWnd object
  501. //     bEnableGroups - TRUE to enable groups.
  502. // Returns:
  503. //     TRUE if successful; otherwise returns FALSE
  504. //-----------------------------------------------------------------------
  505. BOOL Attach(CXTPMDIFrameWnd* pParentFrame,  BOOL bEnableGroups = FALSE);
  506. //-----------------------------------------------------------------------
  507. // Summary:
  508. //     Detaches the tabbed workspace.
  509. // Returns:
  510. //     TRUE if successful; otherwise returns FALSE
  511. //-----------------------------------------------------------------------
  512. BOOL Detach();
  513. //-----------------------------------------------------------------------
  514. // Summary:
  515. //     Determines if a tab workspace is attached.
  516. // Returns:
  517. //     TRUE if attached; otherwise returns FALSE
  518. //-----------------------------------------------------------------------
  519. BOOL IsAttached() const;
  520. //-----------------------------------------------------------------------
  521. // Summary:
  522. //     Retrieves the parent frame of the control.
  523. //-----------------------------------------------------------------------
  524. CMDIFrameWnd* GetParentFrame() const;
  525. //-----------------------------------------------------------------------
  526. // Summary:
  527. //     Determines if right-to-left mode was set.
  528. // Returns:
  529. //     TRUE if text is displayed using right-to-left reading-order properties.
  530. //-----------------------------------------------------------------------
  531. BOOL IsLayoutRTL() const;
  532. //-----------------------------------------------------------------------
  533. // Summary:
  534. //     Call this member to set right-to-left mode.
  535. // Parameters:
  536. //     bRightToLeft - TRUE to set right-to-left reading-order properties.
  537. //-----------------------------------------------------------------------
  538. void SetLayoutRTL(BOOL bRightToLeft);
  539. //-----------------------------------------------------------------------
  540. // Summary:
  541. //     Call this member to set where new tab must appear.
  542. // Parameters:
  543. //     tabPosition - Position of new tab regarding other tabs.
  544. //                   It can be one of the following
  545. //                      * <b>xtpWorkspaceNewTabRightMost</b> New tab will be created after all tabs
  546. //                      * <b>xtpWorkspaceNewTabLeftMost</b> New tab will be created before all tabs
  547. //                      * <b>xtpWorkspaceNewTabNextToActive</b> New tab will be created after active tab
  548. //     activeTab - Enumerator that determine which tab will be activated after closing another one.
  549. //                 It can be one of the following
  550. //                      * <b>xtpWorkspaceActivateNextToClosed</b> Activate tab next to the closed tab.
  551. //                      * <b>xtpWorkspaceActivateTopmost</b> Activate the top-most tab.
  552. // See Also: XTPWorkspaceNewTabPosition, GetNewTabPositon, XTPWorkspaceActivateTab
  553. //-----------------------------------------------------------------------
  554. void SetNewTabPosition(XTPWorkspaceNewTabPosition tabPosition);
  555. void SetAfterCloseActiveTab(XTPWorkspaceActivateTab activeTab); // <combine CXTPTabClientWnd::SetNewTabPosition@XTPWorkspaceNewTabPosition>
  556. //-----------------------------------------------------------------------
  557. // Summary:
  558. //     This method is call to determine where new tab must appear.
  559. // Returns:
  560. //     XTPWorkspaceNewTabPosition enumerator that show where new tab must appear.
  561. // See Also: XTPWorkspaceNewTabPosition, SetNewTabPosition
  562. //-----------------------------------------------------------------------
  563. XTPWorkspaceNewTabPosition GetNewTabPositon() const;
  564. //-----------------------------------------------------------------------
  565. // Summary:
  566. //     Saves Position state.
  567. //-----------------------------------------------------------------------
  568. void SaveState()
  569. {
  570. AfxGetApp()->WriteProfileInt(_T("TabDocking"), _T("Position"), (int)m_pPaintManager->GetPosition());
  571. }
  572. //-----------------------------------------------------------------------
  573. // Summary:
  574. //     Loads previous docking state.
  575. //-----------------------------------------------------------------------
  576. void LoadState()
  577. {
  578. int nValue = AfxGetApp()->GetProfileInt(_T("TabDocking"), _T("Position"), xtpTabPositionTop);
  579. m_pPaintManager->SetPosition(XTPTabPosition(nValue));
  580. m_bForceToRecalc = TRUE;
  581. }
  582. //-----------------------------------------------------------------------
  583. // Summary:
  584. //     Scan through all MDIChild windows and update corresponding
  585. //     tab items if any changes happened (e.g. window text or active MDIChild).
  586. //-----------------------------------------------------------------------
  587. virtual void UpdateContents();
  588. //-----------------------------------------------------------------------
  589. // Summary:
  590. //     This method is called to create new CWorkspace class, you can override it for custom Workskspace.
  591. //-----------------------------------------------------------------------
  592. virtual CWorkspace* CreateWorkspace();
  593. //-----------------------------------------------------------------------
  594. // Summary:
  595. //     Call this member to set flags of the tab workspace.
  596. // Parameters:
  597. //     dwButtons - Buttons to hide. Can be any of the values listed in the
  598. //                 remarks section.
  599. // Remarks:
  600. //     dwButtons can be one of the following:
  601. //     * <b>xtpWorkspaceHideArrows</b> Hides the arrow buttons.
  602. //     * <b>xtpWorkspaceHideClose</b> Hides the close button.
  603. //     * <b>xtpWorkspaceHideAll</b> Hides the arrow and close buttons.
  604. // See also: GetFlags, XTPWorkspaceButtons
  605. //-----------------------------------------------------------------------
  606. void SetFlags(DWORD dwButtons);
  607. //-----------------------------------------------------------------------
  608. // Summary:
  609. //     Call this member to determine which tab navigation buttons are
  610. //     currently displayed in the tab workspace.
  611. // Returns:
  612. //     Retrieves tab navigation flags of the tab workspace.
  613. // See Also: SetFlags, XTPWorkspaceButtons
  614. //-----------------------------------------------------------------------
  615. DWORD GetFlags() const;
  616. //-----------------------------------------------------------------------
  617. // Summary:
  618. //     Call this member function to enable or disable tooltips show
  619. // Parameters:
  620. //     behaviour - Tooltips behaviour will be set. See remarks section for available flags.
  621. // Remarks:
  622. //     <i>behaviour<i> parameter can be one of the following:
  623. //     * <b>xtpTabToolTipNever</b> Show tooltips for tabs always
  624. //     * <b>xtpTabToolTipAlways</b> Doesn't show toltips for tabs
  625. //     * <b> xtpTabToolTipShrinkedOnly</b> Show tooltips only if tab was shrinked (see xtpTabLayoutSizeToFit layout)
  626. //-----------------------------------------------------------------------
  627. void EnableToolTips(XTPTabToolTipBehaviour behaviour = xtpTabToolTipAlways);
  628. //-----------------------------------------------------------------------
  629. // Summary:
  630. //     Call this method to retrieve the paint manager.
  631. // Returns:
  632. //     A pointer to a CXTPTabPaintManager object.
  633. //-----------------------------------------------------------------------
  634. CXTPTabPaintManager* GetPaintManager() const;
  635. //-----------------------------------------------------------------------
  636. // Summary:
  637. //     Call this member to set the specified paint manager.
  638. // Parameters:
  639. //     pPaintManager - Points to a CXTPTabPaintManager object.
  640. //-----------------------------------------------------------------------
  641. void SetPaintManager(CXTPTabPaintManager* pPaintManager);
  642. //-----------------------------------------------------------------------
  643. // Summary:
  644. //     Call this member to specify whether auto themes are used for the
  645. //     TabWorkspace.
  646. // Parameters:
  647. //     bAutoTheme - TRUE to use auto themes.
  648. // Remarks:
  649. //     By default, AutoTheme = TRUE.  When AutoTheme = TRUE, the theme
  650. //     of the TabWorkspace will change when the theme of the CommandBars
  651. //     control is changed.  Set AutoTheme = FALSE to keep the currently
  652. //     set theme even if the CommandBars theme is changed.
  653. //-----------------------------------------------------------------------
  654. void SetAutoTheme(BOOL bAutoTheme = FALSE);
  655. //-----------------------------------------------------------------------
  656. // Summary:
  657. //     Call this member to determine if auto themes are used to
  658. //     theme the TabWorkspace.
  659. // Returns:
  660. //     TRUE if auto themes are used to theme the TabWorkspace, FALSE
  661. //     if auto themes are not used.
  662. //-----------------------------------------------------------------------
  663. BOOL GetAutoTheme() const;
  664. //-----------------------------------------------------------------------
  665. // Summary:
  666. //     Call this member to find the item that corresponds to the
  667. //     specified window.
  668. // Parameters:
  669. //     hWnd - Handle of the window.
  670. // Returns:
  671. //     A pointer to a CXTPTabManagerItem object.
  672. //-----------------------------------------------------------------------
  673. CXTPTabManagerItem* FindItem(const HWND hWnd) const;
  674. //-----------------------------------------------------------------------
  675. // Summary:
  676. //     Call this function to determine which tab, if any, is at the
  677. //     specified screen position.
  678. // Parameters:
  679. //     pt - Point to be tested.
  680. // Returns:
  681. //     The zero-based index of the tab, or returns -1 if no tab is
  682. //     at the specified position.
  683. //-----------------------------------------------------------------------
  684. CXTPTabManagerItem* HitTest(CPoint pt) const;
  685. //-----------------------------------------------------------------------
  686. // Summary:
  687. //     Call this member to retrieve the current number of workspaces.
  688. // Returns:
  689. //     An integer value that represents the number of workspaces.
  690. // Remarks:
  691. //     If tab groups are enabled, then there will be more than
  692. //     one workspace.  If tab groups are disabled, then there is only 1
  693. //     workspace with an index of 0.
  694. // See Also: GetWorkspace
  695. //-----------------------------------------------------------------------
  696. int GetWorkspaceCount() const;
  697. //-----------------------------------------------------------------------
  698. // Summary:
  699. //     Call this member to return the workspace at the specified index.
  700. // Parameters:
  701. //     nIndex - An integer index starting at 0.
  702. // Returns:
  703. //     A pointer to the workspace currently at this index.
  704. // Remarks:
  705. //     If tab groups are enabled, then there will be more than
  706. //     one workspace.  If tab groups are disabled, then there is only 1
  707. //     workspace with an index of 0.
  708. // See Also: GetWorkspaceCount
  709. //-----------------------------------------------------------------------
  710. CWorkspace* GetWorkspace(int nIndex) const;
  711. //-----------------------------------------------------------------------
  712. // Summary:
  713. //     Returns the workspace command mode.
  714. // Parameters:
  715. //     nID    - Specifies the identifier of the workspace.
  716. //     ppItem - MDI active item.
  717. // Remarks:
  718. //     Call this member function if you want to determine whether or
  719. //     not workspace command is enabled.
  720. // Returns:
  721. //     TRUE when workspace command is enabled; FALSE when it is disabled.
  722. //-----------------------------------------------------------------------
  723. BOOL IsWorkspaceCommandEnabled(UINT nID, CXTPTabManagerItem** ppItem = NULL);
  724. //-----------------------------------------------------------------------
  725. // Summary:
  726. //     Call this method to execute special workspace command
  727. // Parameters:
  728. //     nID - Specifies the identifier of the workspace. Can be any of the values listed in the Remarks section.
  729. // Remarks:
  730. //     nID can be one of the following:
  731. //     * <b>XTP_ID_WORKSPACE_NEWVERTICAL</b> Creates new vertical group.
  732. //     * <b>XTP_ID_WORKSPACE_NEWHORIZONTAL</b> Creates new horizontal group.
  733. //     * <b>XTP_ID_WORKSPACE_MOVEPREVIOUS</b> Moves item to previous group.
  734. //     * <b>XTP_ID_WORKSPACE_MOVENEXT</b> Moves item to next group.
  735. //-----------------------------------------------------------------------
  736. void OnWorkspaceCommand(UINT nID);
  737. //-----------------------------------------------------------------------
  738. // Summary:
  739. //     Call this method to refresh all the items.
  740. // Parameters:
  741. //     bRecalcLayout - true to recalculate layout of frame.
  742. //-----------------------------------------------------------------------
  743. void Refresh(BOOL bRecalcLayout = TRUE);
  744. //-----------------------------------------------------------------------
  745. // Summary:
  746. //     Converts the workspace coordinates of a given point on the display to screen coordinates.
  747. // Parameters:
  748. //     lpPoint - Points to a POINT structure or CPoint object that contains the client coordinates to be converted.
  749. //-----------------------------------------------------------------------
  750. void WorkspaceToScreen(LPPOINT lpPoint) const;
  751. //-----------------------------------------------------------------------
  752. // Summary:
  753. //     Converts the screen coordinates of a given point or rectangle on the display to client coordinates.
  754. // Parameters:
  755. //     lpPoint - Points to a CPoint object or POINT structure that contains the screen coordinates to be converted.
  756. //-----------------------------------------------------------------------
  757. void ScreenToWorkspace(LPPOINT lpPoint) const;
  758. //-----------------------------------------------------------------------
  759. // Summary:
  760. //     Call this member function to show or hide the workspace.
  761. // Parameters:
  762. //     bShow - TRUE to show the workspace, or FALSE to hide it.
  763. //-----------------------------------------------------------------------
  764. void ShowWorkspace(BOOL bShow);
  765. //-----------------------------------------------------------------------
  766. // Summary:
  767. //     Call this method to set custom workspace control.
  768. // Parameters:
  769. //     pWorkspace - Custom workspace control
  770. //-----------------------------------------------------------------------
  771. void SetTabWorkspace(CWorkspace* pWorkspace);
  772. //-----------------------------------------------------------------------
  773. // Summary:
  774. //     Returns the current reordering allowance.
  775. // Returns:
  776. //     TRUE when reordering is allowed; FALSE when it is disallowed.
  777. //-----------------------------------------------------------------------
  778. BOOL IsAllowReorder() const;
  779. //-----------------------------------------------------------------------
  780. // Summary:
  781. //     Call this member function to allow or disallow reordering.
  782. // Parameters:
  783. //     bAllowReorder - TRUE for allowing reordering; FALSE for disallowing
  784. //                     reordering.
  785. //-----------------------------------------------------------------------
  786. void SetAllowReorder(BOOL bAllowReorder);
  787. //-----------------------------------------------------------------------
  788. // Summary:
  789. //     This member is called when the background is filled.
  790. // Parameters:
  791. //     pDC - Pointer to a valid device context.
  792. //     rc  - Rectangle area to be filled.
  793. //-----------------------------------------------------------------------
  794. virtual void OnFillBackground(CDC* pDC, CRect rc);
  795. //-----------------------------------------------------------------------
  796. // Summary:
  797. //     This member is called when the client is drawn.
  798. // Parameters:
  799. //     pDC - Pointer to a valid device context.
  800. //     rc  - Rectangle area to be drawn.
  801. //-----------------------------------------------------------------------
  802. virtual void OnDraw(CDC* pDC, CRect rc);
  803. //-----------------------------------------------------------------------
  804. // Summary:
  805. //     Call this method to get tooltip context pointer.
  806. //-----------------------------------------------------------------------
  807. CXTPToolTipContext* GetToolTipContext() const;
  808. //-----------------------------------------------------------------------
  809. // Summary:
  810. //     Call this member to use trackers.
  811. // Parameters:
  812. //     bSplitterTracker - TRUE to use trackers.
  813. // Remarks:
  814. //     This member function will display the contents for child window
  815. //     while the splitter is resized if bSplitterTracker is set to FALSE.
  816. // See Also: IsSplitterTrackerUsed
  817. //-----------------------------------------------------------------------
  818. void UseSplitterTracker(BOOL bSplitterTracker);
  819. //-----------------------------------------------------------------------
  820. // Summary:
  821. //     Call this member to determine if the splitter tracker is used.
  822. // Returns:
  823. //     TRUE if the splitter tracker is used; otherwise returns FALSE.
  824. // See Also: UseSplitterTracker
  825. //-----------------------------------------------------------------------
  826. BOOL IsSplitterTrackerUsed() const;
  827. //-----------------------------------------------------------------------
  828. // Summary:
  829. //     Call this member to get the command bar's object.
  830. // Returns:
  831. //     A CXTPCommandBars pointer (can be NULL).
  832. //-----------------------------------------------------------------------
  833. virtual CXTPCommandBars* GetCommandBars() const;
  834. //-----------------------------------------------------------------------
  835. // Summary:
  836. //     Call this member to tile child windows in workspace (only if EnableGroups enabled)
  837. // Parameters:
  838. //     bHorizontal - TRUE to tile horizontally.
  839. //-----------------------------------------------------------------------
  840. void MDITile(BOOL bHorizontal);
  841. //-----------------------------------------------------------------------
  842. // Summary:
  843. //     Returns an item by its index.
  844. // Parameters:
  845. //     nIndex - Zero-based index of the item in the collection.
  846. // Remarks:
  847. //     You use this member function to get an item from collection by
  848. //     item index. If the given index is less than 0 or greater than
  849. //     the value returned by GetItemCount(), GetItem() returns NULL.
  850. // Returns:
  851. //     Pointer to the found item, if any, or NULL otherwise.
  852. //-----------------------------------------------------------------------
  853. CXTPTabManagerItem* GetItem(int nIndex) const;
  854. //-----------------------------------------------------------------------
  855. // Summary:
  856. //     Returns the number of items.
  857. // Returns:
  858. //     The number of items.
  859. //-----------------------------------------------------------------------
  860. int GetItemCount() const;
  861. //-----------------------------------------------------------------------
  862. // Summary:
  863. //     Call this method to reposition items.
  864. //-----------------------------------------------------------------------
  865. virtual void Reposition();
  866. protected:
  867. //-----------------------------------------------------------------------
  868. // Summary:
  869. //     If m_bAutoTheme is FALSE, then it checks to see if the theme
  870. //     set for the TabWorkspace is different from the theme set for
  871. //     the CommandBars.  If the themes are different, then the TabWorkSpace
  872. //     theme is set to the theme specified in m_themeCommandBars.
  873. //-----------------------------------------------------------------------
  874. virtual void CheckCommandBarsTheme();
  875. //-----------------------------------------------------------------------
  876. // Summary:
  877. //     Retrieves the current active MDI child window.
  878. // Returns:
  879. //     A pointer to the active MDI child window.
  880. //-----------------------------------------------------------------------
  881. CWnd* MDIGetActive();
  882. //-----------------------------------------------------------------------
  883. // Summary:
  884. //     Call this member function to activate an MDI child window
  885. //     independently of the MDI frame window.
  886. // Parameters:
  887. //     pWnd - Pointer to a valid device context.
  888. //-----------------------------------------------------------------------
  889. void MDIActivate(CWnd* pWnd);
  890. //-----------------------------------------------------------------------
  891. // Summary:
  892. //     This member function retrieves the text of a specific tab.
  893. // Parameters:
  894. //     pChildWnd - A CWnd pointer that represents the child to be
  895. //                 displayed when the window is activated.
  896. // Returns:
  897. //     The text of a particular tab, or NULL if an error occurs.
  898. //-----------------------------------------------------------------------
  899. virtual CString GetItemText(const CWnd* pChildWnd) const;
  900. //-----------------------------------------------------------------------
  901. // Summary:
  902. //     This member function returns the RGB value for the referenced
  903. //     item text or (COLORREF)-1, if the color was not set.
  904. // Parameters:
  905. //     pItem - A pointer to a CXTPTabManagerItem.
  906. // Returns:
  907. //     The RGB value for the referenced item text, or (COLORREF)-1,
  908. //     if the color was not set.
  909. //-----------------------------------------------------------------------
  910. virtual COLORREF GetItemColor(const CXTPTabManagerItem* pItem) const;
  911. //-----------------------------------------------------------------------
  912. // Summary:
  913. //     This member function retrieves the icon of a specific tab.
  914. // Parameters:
  915. //     pItem - A pointer to a CXTPTabManagerItem.
  916. // Returns:
  917. //     The icon of a particular tab, or NULL if an error occurs.
  918. //-----------------------------------------------------------------------
  919. virtual HICON GetItemIcon(const CXTPTabManagerItem* pItem) const;
  920. //-----------------------------------------------------------------------
  921. // Summary:
  922. //     Returns the tooltip associated with the specified item.
  923. // Parameters:
  924. //     pItem - Points to a CXTPTabManagerItem object.
  925. // Returns:
  926. //     Associated tooltip
  927. //-----------------------------------------------------------------------
  928. virtual CString GetItemTooltip(const CXTPTabManagerItem* pItem) const;
  929. //-----------------------------------------------------------------------
  930. // Summary:
  931. //     Call this member function to add a workspace.
  932. // Parameters:
  933. //     nIndex - Index of the workspace.
  934. // Returns:
  935. //     TRUE if successful; otherwise returns FALSE.
  936. //-----------------------------------------------------------------------
  937. virtual CWorkspace*  AddWorkspace(int nIndex = -1);
  938. //-----------------------------------------------------------------------
  939. // Summary:
  940. //     This member function adds a new tab item for the specified window.
  941. // Parameters:
  942. //     pChildWnd - A CWnd pointer that represents the child to be
  943. //                 displayed when the window is activated.
  944. // Returns:
  945. //     A pointer to a CXTPTabManagerItem object.
  946. //-----------------------------------------------------------------------
  947. virtual CXTPTabManagerItem* AddItem(CWnd* pChildWnd);
  948. //-----------------------------------------------------------------------
  949. // Summary:
  950. //     Call this member to find the specified index.
  951. // Parameters:
  952. //     pWorkspace - Pointer to a CXTPTabManger object.
  953. // Returns:
  954. //     The index of the matching item.
  955. //-----------------------------------------------------------------------
  956. int FindIndex(CXTPTabManager* pWorkspace) const;
  957. //-----------------------------------------------------------------------
  958. // Summary:
  959. //     This member functions sets a workspace active.
  960. // Parameters:
  961. //     pWorkspace - Pointer to a CWorkspace object.
  962. //-----------------------------------------------------------------------
  963. void SetActiveWorkspace(CWorkspace* pWorkspace);
  964. //-----------------------------------------------------------------------
  965. // Summary:
  966. //     This method shows the context menu for toolbars.
  967. // Parameters:
  968. //     pt - Position of the menu to show.
  969. //-----------------------------------------------------------------------
  970. void ContextMenu(CPoint pt);
  971. //-----------------------------------------------------------------------
  972. // Summary:
  973. //     Call this member function to initialize a loop.
  974. //-----------------------------------------------------------------------
  975. void InitLoop();
  976. //-----------------------------------------------------------------------
  977. // Summary:
  978. //     This member function is called when a loop is canceled.
  979. //-----------------------------------------------------------------------
  980. void CancelLoop();
  981. //-----------------------------------------------------------------------
  982. // Summary:
  983. //     This member function is called to update the status of the
  984. //     TabWorkspace navigation buttons.
  985. // Parameters:
  986. //     pWorkspace - Pointer to a CWorkspace object.
  987. // SeeAlso:  SetFlags, GetFlags
  988. //-----------------------------------------------------------------------
  989. virtual void UpdateFlags(CWorkspace* pWorkspace);
  990. //-----------------------------------------------------------------------
  991. // Summary:
  992. //     Returns the selected item in the control.
  993. // Returns:
  994. //     A pointer to a CXTPTabManagerItem object.
  995. //-----------------------------------------------------------------------
  996. CXTPTabManagerItem* GetSelectedItem() const;
  997. protected:
  998. //{{AFX_CODEJOCK_PRIVATE
  999. void DoWorkspaceCommand(CXTPTabManagerItem* pItem, CWorkspace* pFocusWorkspace, int nAction);
  1000. void DrawFocusRect(BOOL bRemoveRect = FALSE);
  1001. void TrackSplitter(int nWorkspace, CPoint point);
  1002. void RepositionWorkspaces(CRect rc, CRect rcAvail, CWorkspace* pWorkspaceFirst, CWorkspace* pWorkspaceSecond);
  1003. void NormalizeWorkspaceSize();
  1004. void ReorderWorkspace(CPoint pt, CXTPTabManagerItem* pItem);
  1005. void ActivateNextItem(CXTPTabManagerItem* pItem);
  1006. virtual BOOL OnBeforeItemClick(CXTPTabManagerItem* pItem);
  1007. //}}AFX_CODEJOCK_PRIVATE
  1008. protected:
  1009. //{{AFX_CODEJOCK_PRIVATE
  1010. DECLARE_MESSAGE_MAP()
  1011. //{{AFX_VIRTUAL(CXTPTabClientWnd)
  1012. virtual void CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType);
  1013. virtual BOOL PreTranslateMessage(MSG* pMsg);
  1014. virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  1015. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  1016. //}}AFX_VIRTUAL
  1017. //{{AFX_MSG(CXTPTabClientWnd)
  1018. afx_msg LRESULT OnMDIActivate(WPARAM wParam, LPARAM lParam);
  1019. afx_msg LRESULT OnMDICreate(WPARAM wParam, LPARAM lParam);
  1020. afx_msg LRESULT OnMDIDestroy(WPARAM wParam, LPARAM lParam);
  1021. afx_msg LRESULT OnMDINext(WPARAM wParam, LPARAM lParam);
  1022. afx_msg void OnSize(UINT nType, int cx, int cy);
  1023. afx_msg void OnPaint();
  1024. afx_msg BOOL OnEraseBkgnd(CDC*);
  1025. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM lParam);
  1026. afx_msg void OnNcPaint();
  1027. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  1028. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  1029. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  1030. afx_msg void OnMouseLeave();
  1031. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  1032. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  1033. afx_msg void OnSysColorChange();
  1034. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  1035. afx_msg void OnUpdateWorkspaceCommand(CCmdUI* pCmdUI);
  1036. afx_msg BOOL OnNcActivate(BOOL bActive);
  1037. public:
  1038. afx_msg void OnIdleUpdateCmdUI();
  1039. //}}AFX_MSG
  1040. //}}AFX_CODEJOCK_PRIVATE
  1041. public:
  1042. BOOL m_bDelayLock;                      // TRUE to lock update with small delay
  1043. BOOL m_bLockUpdate;                     // TRUE to lock update tabs.
  1044. BOOL m_bForceToRecalc;                  // TRUE to recalculate in next idle event.
  1045. BOOL m_bLockReposition;                 // TRUE to lock reposition.
  1046. protected:
  1047. CArray<CWorkspace*, CWorkspace*> m_arrWorkspace;    // Array of workspaces.
  1048. CWorkspace* m_pTabWorkspace;            // Custom workspace
  1049. BOOL m_bUserWorkspace;                  // TRUE if custom workspace used
  1050. CMDIFrameWnd* m_pParentFrame;           // pointer to the corresponding parent MDIFrame window
  1051. BOOL m_bRefreshed;                      // TRUE if Refresh currently executed.
  1052. CXTPTabPaintManager* m_pPaintManager;   // Current paint manager.
  1053. XTPPaintTheme m_themeCommandBars;       // Theme set for the TabWorkspace (Can be different from CommandBars if m_bAutoTheme is FALSE)
  1054. BOOL m_bAutoTheme;                      // TRUE to auto theme the TabWorkspace.
  1055. CWorkspace* m_pActiveWorkspace;         // Active workspace.
  1056. BOOL m_bHorizSplitting;                 // TRUE if groups devided horizontally
  1057. HCURSOR m_hCursorHoriz;                 // Horizontal split cursor handle.
  1058. HCURSOR m_hCursorVert;                  // Vertical split cursor handle.
  1059. HCURSOR m_hCursorNew;                   // New item cursor handle
  1060. HCURSOR m_hCursorDelete;                // Remove item cursor handle
  1061. BOOL m_bThemedBackColor;                // TRUE if a themed backcolor will be used.  If TRUE, then the backcolor of the MDIClient is calculated from current theme, if FALSE the standard BackColor property will be used
  1062. BOOL m_bEnableGroups;                   // TRUE if TabWorkspace groups are enabled.
  1063. DWORD m_dwFlags;                        // Specifies which tab navigation buttons are displayed.
  1064. BOOL m_bAllowReorder;                   // TRUE to allow the user to reorder tabs.
  1065. BOOL m_bShowWorkspace;                  // TRUE to show the TabWorkspace, FALSE to hide the TabWorkspace.
  1066. BOOL m_bUpdateContents;                 // TRUE if UpdateContents executed.
  1067. CXTPToolTipContext* m_pToolTipContext;  // Tooltip Context.
  1068. BOOL m_bUseSplitterTracker;             // If TRUE, splitter trackers are used.  When resizing a workspace, an outline of the workspace is drawn as the splitter is dragged.  If FALSE, the workspace will be resized in "real-time."
  1069. int m_nSplitterSize;                    // Splitter size
  1070. XTPWorkspaceNewTabPosition m_newTabPosition; // New tab position.
  1071. XTPWorkspaceActivateTab m_afterCloseTabPosition;  // Tab to make active after the currently active tab is closed.
  1072. protected:
  1073. //{{AFX_CODEJOCK_PRIVATE
  1074. CRect m_rcGroup;
  1075. CTabClientDropTarget* m_pDropTarget;
  1076. CWorkspace* m_pFocusWorkspace;
  1077. int m_nFocusedAction;
  1078. CRect m_rectLast;
  1079. CSize m_sizeLast;
  1080. CDC* m_pDC;
  1081. BOOL m_bIgnoreFlickersOnActivate;
  1082. BOOL m_bRightToLeft;
  1083. UINT m_nMsgUpdateSkinState;
  1084. UINT m_nMsgQuerySkinState;
  1085. //}}AFX_CODEJOCK_PRIVATE
  1086. friend class CWorkspace;
  1087. friend class CSingleWorkspace;
  1088. friend class CTabClientDropTarget;
  1089. friend class CNavigateButtonActiveFiles;
  1090. friend class CXTPControlTabWorkspace;
  1091. };
  1092. class _XTP_EXT_CLASS CXTPControlTabWorkspace : public CXTPControlButton, public CXTPTabClientWnd::CWorkspace
  1093. {
  1094. DECLARE_XTP_CONTROL(CXTPControlTabWorkspace)
  1095. public:
  1096. CXTPControlTabWorkspace();
  1097. ~CXTPControlTabWorkspace();
  1098. public:
  1099. virtual void RedrawControl(LPCRECT lpRect, BOOL bAnimate);
  1100. virtual CWnd* GetWindow() const;
  1101. CXTPTabPaintManager* GetPaintManager() const;
  1102. virtual void OnRecalcLayout();
  1103. XTPTabPosition GetPosition() const;
  1104. virtual void OnRemoved();
  1105. protected:
  1106. virtual void SetRect(CRect rcControl);
  1107. virtual void Draw(CDC* pDC);
  1108. virtual CSize GetSize(CDC* pDC);
  1109. virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  1110. virtual void OnClick(BOOL bKeyboard = FALSE, CPoint pt = CPoint(0, 0));
  1111. void OnMouseMove(CPoint point);
  1112. protected:
  1113. BOOL m_bForceRecalc;
  1114. };
  1115. /////////////////////////////////////////////////////////////////////////////
  1116. AFX_INLINE BOOL CXTPTabClientWnd::IsAttached() const {
  1117. return (m_pParentFrame!=NULL ? TRUE : FALSE);
  1118. }
  1119. AFX_INLINE CMDIFrameWnd* CXTPTabClientWnd::GetParentFrame() const {
  1120. return m_pParentFrame;
  1121. }
  1122. AFX_INLINE DWORD CXTPTabClientWnd::GetFlags() const {
  1123. return m_dwFlags;
  1124. }
  1125. AFX_INLINE CXTPToolTipContext* CXTPTabClientWnd::GetToolTipContext() const {
  1126. return m_pToolTipContext;
  1127. }
  1128. AFX_INLINE void CXTPTabClientWnd::UseSplitterTracker(BOOL bSplitterTracker) {
  1129. m_bUseSplitterTracker = bSplitterTracker;
  1130. }
  1131. AFX_INLINE BOOL CXTPTabClientWnd::IsSplitterTrackerUsed() const {
  1132. return m_bUseSplitterTracker;
  1133. }
  1134. AFX_INLINE void CXTPTabClientWnd::SetNewTabPosition(XTPWorkspaceNewTabPosition tabPosition) {
  1135. m_newTabPosition = tabPosition;
  1136. }
  1137. AFX_INLINE XTPWorkspaceNewTabPosition CXTPTabClientWnd::GetNewTabPositon() const {
  1138. return m_newTabPosition;
  1139. }
  1140. AFX_INLINE void CXTPTabClientWnd::SetAfterCloseActiveTab(XTPWorkspaceActivateTab activeTab) {
  1141. m_afterCloseTabPosition = activeTab;
  1142. }
  1143. #endif// #if !defined(__XTPTABCLIENTWNDEX_H__)