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

对话框与窗口

开发平台:

Visual C++

  1. // XTExcelTabCtrl.h interface for the CXTExcelTabCtrl class.
  2. //
  3. // This file is a part of the XTREME CONTROLS 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(__XTEXCELTABCTRL_H__)
  22. #define __XTEXCELTABCTRL_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTExcelTabCtrlTheme.h"
  28. // ---------------------------------------------------------------
  29. // Summary:
  30. //     Enumeration used to determine arrow button display.
  31. // Remarks:
  32. //     XTArrowIcon type defines constants used by the
  33. //     CXTExcelTabCtrlButtonState to determine which arrow is to be
  34. //     displayed for a particular tab button.
  35. // See Also:
  36. //     CXTExcelTabCtrlButtonState, CXTExcelTabCtrl
  37. //
  38. // <KEYWORDS xtArrowIconLeft, xtArrowIconLeftHome, xtArrowIconRight, xtArrowIconRightHome>
  39. // ---------------------------------------------------------------
  40. enum XTArrowIcon
  41. {
  42. xtArrowIconLeft      =   0x0200, // Left arrow display.
  43. xtArrowIconLeftHome  =   0x0201, // Left home arrow display.
  44. xtArrowIconRight     =   0x0000, // Right arrow display.
  45. xtArrowIconRightHome =   0x0001  // Right home arrow display.
  46. };
  47. //===========================================================================
  48. // Summary:
  49. //     The CXTExcelTabCtrlButtonState class is used by the CXTExcelTabCtrl class
  50. //     to manage navigation button information. This class contains information
  51. //     about the state and command identifiers for the button.
  52. //===========================================================================
  53. class _XTP_EXT_CLASS CXTExcelTabCtrlButtonState
  54. {
  55. public:
  56. //-------------------------------------------------------------------------
  57. // Summary:
  58. //     Constructs a CXTExcelTabCtrlButtonState object.
  59. //-------------------------------------------------------------------------
  60. CXTExcelTabCtrlButtonState();
  61. public:
  62. //-----------------------------------------------------------------------
  63. // Summary:
  64. //     This member function is called to initialize the information
  65. //     about the tab control navigation button.
  66. // Parameters:
  67. //     rect     - Size and location of the button.
  68. //     iCommand - Command ID for the button.
  69. //     iconType - Icon style of the button.
  70. //-----------------------------------------------------------------------
  71. void SetInfo(CRect rect, int iCommand, XTArrowIcon iconType);
  72. public:
  73. int             m_iCommand; // Button command ID.
  74. bool            m_bPressed; // true if the button is pressed.
  75. bool            m_bEnabled; // true if the button is enabled.
  76. bool            m_bHilight; // true if the mouse if hovering.
  77. CRect           m_rect;     // Size and location of the button.
  78. XTArrowIcon     m_IconType; // Icon style of the button.
  79. };
  80. //{{AFX_CODEJOCK_PRIVATE
  81. typedef CArray <CXTTcbItem*, CXTTcbItem*> CTabItemArray;
  82. //}}AFX_CODEJOCK_PRIVATE
  83. //===========================================================================
  84. // Summary:
  85. //     CXTExcelTabCtrl is a CWnd derived class.  It is used to create an Excel
  86. //     style sheet control. This control allows you to define if you want the
  87. //     control to have home, end, back, and next buttons.
  88. //===========================================================================
  89. class _XTP_EXT_CLASS CXTExcelTabCtrl : public CWnd, public CXTThemeManagerStyleHostBase
  90. {
  91. DECLARE_DYNAMIC(CXTExcelTabCtrl)
  92. DECLARE_THEME_HOST(CXTExcelTabCtrl)
  93. DECLARE_THEME_REFRESH(CXTExcelTabCtrl)
  94. public:
  95. //-----------------------------------------------------------------------
  96. // Summary:
  97. //     Constructs a CXTExcelTabCtrl object
  98. //-----------------------------------------------------------------------
  99. CXTExcelTabCtrl();
  100. //-----------------------------------------------------------------------
  101. // Summary:
  102. //     Destroys a CXTExcelTabCtrl object, handles cleanup and deallocation
  103. //-----------------------------------------------------------------------
  104. virtual ~CXTExcelTabCtrl();
  105. public:
  106. //-----------------------------------------------------------------------
  107. // Summary      : Call this member function to retrieve a reference to the
  108. //                tab item array.
  109. // Returns      : A reference to a CTabItemArray object used for maintaining
  110. //                the list of tabs for the tab control.
  111. //-----------------------------------------------------------------------
  112. CTabItemArray& GetTabItemArray() {
  113. return m_tcbItems;
  114. }
  115. //-----------------------------------------------------------------------
  116. // Summary:
  117. //     This member function gets the text of a specific tab.
  118. // Parameters:
  119. //     nIndex - The index of the tab whose text is to be retrieved.
  120. // Returns:
  121. //     The text of a particular tab, or NULL if an error occurs.
  122. //-----------------------------------------------------------------------
  123. LPCTSTR GetItemText(int nIndex) const;
  124. //-----------------------------------------------------------------------
  125. // Summary:
  126. //     This member function will set the text of a particular tab.
  127. // Parameters:
  128. //     nIndex  - The index of the tab whose text is to be changed.
  129. //     pszText - The new title for the tab.
  130. // Returns:
  131. //     true when successful.
  132. //-----------------------------------------------------------------------
  133. bool SetItemText(int nIndex, LPCTSTR pszText);
  134. //-----------------------------------------------------------------------
  135. // Summary:
  136. //     This member function gets a CWnd pointer to the window that is associated
  137. //     with a specific tab.
  138. // Parameters:
  139. //     nIndex - The index of the tab whose managed window is to be retrieved.
  140. // Returns:
  141. //     A pointer to the window that is associated with a tab, or it returns NULL
  142. //     if no window is associated with (managed by) the tab.
  143. //-----------------------------------------------------------------------
  144. CWnd *GetItemWindow(int nIndex) const;
  145. //-----------------------------------------------------------------------
  146. // Summary:
  147. //     This member function will set the fonts to be used by the tab control.
  148. // Parameters:
  149. //     pNormFont - Represents the font used by non-selected tabs.
  150. //     pBoldFont - Represents the font used by selected tabs.
  151. //-----------------------------------------------------------------------
  152. virtual void SetTabFonts(CFont* pNormFont, CFont* pBoldFont);
  153. // ---------------------------------------------------------------------
  154. // Summary:
  155. //     This member function will insert a tab into the flat tab control.
  156. // Parameters:
  157. //     nItem -        Index of the tab to insert.
  158. //     nTextID -      String resource ID of the tab label.
  159. //     lpszItem -     NULL terminated string that represents the tab label.
  160. //     pWndControl -  Optional pointer to the managed control.
  161. // Returns:
  162. //     The index of the tab that has been inserted if successful,
  163. //     otherwise -1.
  164. // ---------------------------------------------------------------------
  165. virtual int InsertItem(int nItem, UINT nTextID, CWnd* pWndControl = NULL);
  166. virtual int InsertItem(int nItem, LPCTSTR lpszItem, CWnd* pWndControl = NULL); //<combine CXTExcelTabCtrl::InsertItem@int@UINT@CWnd* >
  167. //-----------------------------------------------------------------------
  168. // Summary:
  169. //     This member function will delete the tab specified by 'nItem' from the
  170. //     tab control.
  171. // Parameters:
  172. //     nItem - Index of the tab to delete.
  173. // Returns:
  174. //     TRUE if successful, otherwise returns FALSE.
  175. //-----------------------------------------------------------------------
  176. virtual BOOL DeleteItem(int nItem);
  177. //-----------------------------------------------------------------------
  178. // Summary:
  179. //     This member function will remove all of the tabs from the tab control.
  180. // Returns:
  181. //     TRUE if successful, otherwise returns FALSE.
  182. //-----------------------------------------------------------------------
  183. virtual BOOL DeleteAllItems();
  184. //-----------------------------------------------------------------------
  185. // Summary:
  186. //     This member function will retrieve the size of the tab specified by
  187. //     'nItem'.
  188. // Parameters:
  189. //     nItem  - Index of the tab to retrieve the size of.
  190. //     lpRect - Points to a RECT structure to receive the size of the tab.
  191. // Returns:
  192. //     TRUE if successful, otherwise returns FALSE.
  193. //-----------------------------------------------------------------------
  194. virtual BOOL GetItemRect(int nItem, LPRECT lpRect);
  195. //-----------------------------------------------------------------------
  196. // Summary:
  197. //     Call this function to determine which tab, if any, is at the
  198. //     specified screen position.
  199. // Parameters:
  200. //     pHitTestInfo - Pointer to a TCHITTESTINFO structure, as
  201. //                    described in the Platform SDK, which specifies
  202. //                    the screen position to test.
  203. // Returns:
  204. //     The zero-based index of the tab, or returns -1 if no tab is at
  205. //     the specified position.
  206. //-----------------------------------------------------------------------
  207. virtual int HitTest(TCHITTESTINFO* pHitTestInfo) const;
  208. //-----------------------------------------------------------------------
  209. // Summary:
  210. //     Call this function to retrieve the currently selected tab in a flat
  211. //     tab control.
  212. // Returns:
  213. //     A zero-based index of the selected tab if successful, or returns
  214. //     -1 if no tab is selected.
  215. //-----------------------------------------------------------------------
  216. virtual int GetCurSel() const;
  217. //-----------------------------------------------------------------------
  218. // Summary:
  219. //     This member function selects a tab in a flat tab control.
  220. // Parameters:
  221. //     nItem - The zero-based index of the item to be selected.
  222. // Returns:
  223. //     A zero-based index of the previously selected tab if successful,
  224. //     otherwise returns -1.
  225. //-----------------------------------------------------------------------
  226. virtual int SetCurSel(int nItem);
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     Call this function to retrieve the number of tabs in the tab
  230. //     control.
  231. // Returns:
  232. //     The number of items in the tab control.
  233. //-----------------------------------------------------------------------
  234. virtual int GetItemCount() const;
  235. //-----------------------------------------------------------------------
  236. // Summary:
  237. //     This member function will set the tooltip for the tab specified
  238. //     by 'nItem'.
  239. // Parameters:
  240. //     nItem      - The zero-based index of tab to receive the tooltip text.
  241. //     lpszTabTip - A pointer to a string containing the tooltip text.
  242. //-----------------------------------------------------------------------
  243. virtual void SetTipText(int nItem, LPCTSTR lpszTabTip);
  244. //-----------------------------------------------------------------------
  245. // Summary:
  246. //     This member function will get the tooltip text associated with the
  247. //     tab specified by 'nItem'.
  248. // Parameters:
  249. //     nItem - The zero-based index of the tab to retrieve the tooltip
  250. //             text for.
  251. // Returns:
  252. //     A CString object containing the text to be used in the tooltip.
  253. //-----------------------------------------------------------------------
  254. virtual CString GetTipText(int nItem);
  255. //-----------------------------------------------------------------------
  256. // Summary:
  257. //     This member function will cause the tab control to reposition
  258. //     the tabs to the home position.
  259. //-----------------------------------------------------------------------
  260. virtual void Home();
  261. //-----------------------------------------------------------------------
  262. // Summary:
  263. //     This member function changes the location of the sizing gripper.
  264. //     The function has no effect if the FTS_XT_HSCROLL is not used.
  265. // Parameters:
  266. //     nPos     - The position for the gripper, relative to the left-hand-side of
  267. //                the control.
  268. //     bPercent - Indicates that the position is a percent of the control width,
  269. //                as opposed to an absolute location in pixels.
  270. //-----------------------------------------------------------------------
  271. void SetGripperPosition(int nPos, bool bPercent);
  272. //-----------------------------------------------------------------------
  273. // Summary:
  274. //     This member function gets the location of the sizing gripper in pixels
  275. //     relative to the left hand side of the control.
  276. // Returns:
  277. //     An integer value representing the location of the sizing gripper
  278. //     in pixels relative to the left hand side of the control.
  279. //-----------------------------------------------------------------------
  280. int GetGripperPosition() const;
  281. // --------------------------------------------------------------------
  282. // Summary:
  283. //     Synchronizes the scroll bar with the horizontal scroll position.
  284. // Remarks:
  285. //     Call this function to synchronize the tab control's horizontal
  286. //     scroll bar with the horizontal scroll bar of the current view.
  287. //
  288. // You should call this function if anything happens in the view that
  289. //     affects the horizontal scroll bar (e.g., a user typing text into
  290. //     an edit control could make the text wider, thus requiring a call
  291. //     to this function).
  292. // --------------------------------------------------------------------
  293. void SyncScrollBar();
  294. //-----------------------------------------------------------------------
  295. // Summary:
  296. //     This member function is called to set the shadow color for all tabs.
  297. // Parameters:
  298. //     crShadow - RGB value that represents the tab shadow color.
  299. //-----------------------------------------------------------------------
  300. void SetTabShadowColor(COLORREF crShadow);
  301. //-----------------------------------------------------------------------
  302. // Summary:
  303. //     This member function gets an RGB value that represents the shadow color
  304. //     of the tab.
  305. // Returns:
  306. //     An RGB value that represents the tab shadow color.
  307. //-----------------------------------------------------------------------
  308. COLORREF GetTabShadowColor() const;
  309. //-----------------------------------------------------------------------
  310. // Summary:
  311. //     This member function is called to set the highlight color for all tabs.
  312. // Parameters:
  313. //     crHilight - RGB value that represents the tab highlight color.
  314. //-----------------------------------------------------------------------
  315. void SetTabHilightColor(COLORREF crHilight);
  316. //-----------------------------------------------------------------------
  317. // Summary:
  318. //     This member function gets an RGB value that represents the highlight
  319. //     color of the tab.
  320. // Returns:
  321. //     An RGB value that represents the tab highlight color.
  322. //-----------------------------------------------------------------------
  323. COLORREF GetTabHilightColor() const;
  324. //-----------------------------------------------------------------------
  325. // Summary:
  326. //     This member function is called to set the default background color
  327. //     for all tabs. If nIndex is specified, the color is only set for the
  328. //     tab located at 'nIndex'.
  329. // Parameters:
  330. //     crBack - RGB value that represents the tab background color.
  331. //     nIndex - The index of the tab to set background color for.
  332. //-----------------------------------------------------------------------
  333. void SetTabBackColor(COLORREF crBack);
  334. void SetTabBackColor(int nIndex, COLORREF crBack); // <combine CXTExcelTabCtrl::SetTabBackColor@COLORREF>
  335. //-----------------------------------------------------------------------
  336. // Summary:
  337. //     This member function gets an RGB value that represents the background
  338. //     color of the tab.
  339. // Parameters:
  340. //     nIndex - The index of the tab to get background color for.
  341. // Returns:
  342. //     An RGB value that represents the tab background color if successful,
  343. //     otherwise returns COLORREF_NULL.
  344. //-----------------------------------------------------------------------
  345. COLORREF GetTabBackColor() const;
  346. COLORREF GetTabBackColor(int nIndex) const; // <combine CXTExcelTabCtrl::GetTabBackColor@const>
  347. //-----------------------------------------------------------------------
  348. // Summary:
  349. //     This member function is called to set the default text color
  350. //     for all tabs. If nIndex is specified, the color is only set for the
  351. //     tab located at 'nIndex'.
  352. // Parameters:
  353. //     crText - RGB value that represents the tab text color.
  354. //     nIndex - The index of the tab to set text color for.
  355. //-----------------------------------------------------------------------
  356. void SetTabTextColor(COLORREF crText);
  357. void SetTabTextColor(int nIndex, COLORREF crText); // <combine CXTExcelTabCtrl::SetTabTextColor@COLORREF>
  358. //-----------------------------------------------------------------------
  359. // Summary:
  360. //     This member function gets an RGB value that represents the text color
  361. //     of the tab.
  362. // Parameters:
  363. //     nIndex - The index of the tab to get text color for.
  364. // Returns:
  365. //     An RGB value that represents the tab text color if successful,
  366. //     otherwise returns COLORREF_NULL.
  367. //-----------------------------------------------------------------------
  368. COLORREF GetTabTextColor() const;
  369. COLORREF GetTabTextColor(int nIndex) const; // <combine CXTExcelTabCtrl::GetTabTextColor@const>
  370. //-----------------------------------------------------------------------
  371. // Summary:
  372. //     This member function is called to set the selected background color
  373. //     for all tabs. If nIndex is specified, the color is only set for the
  374. //     tab located at 'nIndex'.
  375. // Parameters:
  376. //     crBack - RGB value that represents the selected tab background color.
  377. //     nIndex - The index of the tab to set selected background color for.
  378. //-----------------------------------------------------------------------
  379. void SetSelTabBackColor(COLORREF crBack);
  380. void SetSelTabBackColor(int nIndex, COLORREF crBack); // <combine CXTExcelTabCtrl::SetSelTabBackColor@COLORREF>
  381. //-----------------------------------------------------------------------
  382. // Summary:
  383. //     This member function gets an RGB value that represents the background
  384. //     color for selected tabs.
  385. // Parameters:
  386. //     nIndex - The index of the tab to get selected background color for.
  387. // Returns:
  388. //     An RGB value that represents the selected tabs background color if
  389. //     successful, otherwise returns COLORREF_NULL.
  390. //-----------------------------------------------------------------------
  391. COLORREF GetSelTabBackColor() const;
  392. COLORREF GetSelTabBackColor(int nIndex) const; // <combine CXTExcelTabCtrl::GetSelTabBackColor@const>
  393. //-----------------------------------------------------------------------
  394. // Summary:
  395. //     This member function is called to set the selected text color
  396. //     for all tabs. If nIndex is specified, the color is only set for the
  397. //     tab located at 'nIndex'.
  398. // Parameters:
  399. //     crText - RGB value that represents the selected tab text color.
  400. //     nIndex - The index of the tab to set selected text color for.
  401. //-----------------------------------------------------------------------
  402. void SetSelTabTextColor(COLORREF crText);
  403. void SetSelTabTextColor(int nIndex, COLORREF crText); // <combine CXTExcelTabCtrl::SetSelTabTextColor@COLORREF>
  404. //-----------------------------------------------------------------------
  405. // Summary:
  406. //     This member function gets an RGB value that represents the text color
  407. //     for selected tabs.
  408. // Parameters:
  409. //     nIndex - The index of the tab to get selected text color for.
  410. // Returns:
  411. //     An RGB value that represents the selected tab text color if
  412. //     successful, otherwise returns COLORREF_NULL.
  413. //-----------------------------------------------------------------------
  414. COLORREF GetSelTabTextColor() const;
  415. COLORREF GetSelTabTextColor(int nIndex) const; // <combine CXTExcelTabCtrl::GetSelTabTextColor@const>
  416. //-----------------------------------------------------------------------
  417. // Summary:
  418. //     Call this member function to reset the tab control to use default
  419. //     system colors.
  420. //-----------------------------------------------------------------------
  421. void UpdateDefaultColors();
  422. // -------------------------------------------------------------------------
  423. // Summary:
  424. //     This method obtains a pointer to the specified sibling scroll bar for
  425. //     the flat tab control.
  426. // Parameters:
  427. //     nBar -  Specifies the type of scroll bar. The parameter can take one
  428. //             of the values specified in the Remarks section.
  429. // Remarks:
  430. //     The scroll bar type can be one of the following values.
  431. // <code>
  432. // SB_HORZ - Retrieves the position of the horizontal scroll bar.
  433. // SB_VERT - Retrieves the position of the vertical scroll bar.
  434. // </code>
  435. // -------------------------------------------------------------------------
  436. virtual CScrollBar* GetScrollBarCtrl(int nBar) const;
  437. //-----------------------------------------------------------------------
  438. // Summary:
  439. //     Retrieves the area occupied by the tabs.
  440. // Remarks:
  441. //     This member function is called to retrieve the size and location
  442. //     of the area that is occupied by the tab items.
  443. // Returns:
  444. //     A CRect object representing the tab item area.
  445. //-----------------------------------------------------------------------
  446. CRect GetTabsRect();
  447. //-----------------------------------------------------------------------
  448. // Summary:
  449. //     Retrieves the tab font.
  450. // Parameters:
  451. //     bBold - TRUE to return the bold font.
  452. // Remarks:
  453. //     Call this member function to return a pointer to the font
  454. //     used to display the tab item label for the tab control.
  455. // Returns:
  456. //     A pointer to a CFont object.
  457. //-----------------------------------------------------------------------
  458. CFont* GetTabFont(BOOL bBold);
  459. // ---------------------------------------------------------------------
  460. // Summary:
  461. //     Retrieves the FTS_XT_ styles that are currently in use for
  462. //     the flat tab control.
  463. // Returns:
  464. //     A <i>DWORD</i> value that represents the FTS_XT_ styles
  465. //     currently in use for the flat tab control.
  466. // Remarks:
  467. //     This value is a combination of tab control FTS_XT_ styles,
  468. //     see the CXTExcelTabCtrl::Create method for a list of
  469. //     available styles.
  470. // See Also:
  471. //     Create, SetTabStyle
  472. // ---------------------------------------------------------------------
  473. DWORD GetTabStyle();
  474. // --------------------------------------------------------------------------------
  475. // Summary:
  476. //     Sets the FTS_XT_ styles for a flat tab control.
  477. // Parameters:
  478. //     dwStyle -  Value specifying a combination of flat tab control FTS_XT_
  479. //                styles.
  480. // Returns:
  481. //     A DWORD value that contains the previous tab control FTS_XT_
  482. //     styles.
  483. // Remarks:
  484. //     The <i>dwStyle</i> parameter allows you to set one or more FTS_XT_
  485. //     styles, see the CXTExcelTabCtrl::Create method for a list of
  486. //     available styles.
  487. // See Also:
  488. //     Create, GetTabStyle
  489. // --------------------------------------------------------------------------------
  490. void SetTabStyle(DWORD dwStyle);
  491. // ----------------------------------------------------------------------------------------
  492. // Summary:
  493. //     Creates a flat tab control and attaches it to an instance of a CXTExcelTabCtrl
  494. //     object.
  495. // Parameters:
  496. //     dwStyle -     Specifies the tab control's style. Apply any combination of
  497. //                   tab control styles mentioned below in the Remarks section.
  498. //     rect -        Specifies the tab control's size and position. It can be
  499. //                   either a CRect object or a RECT structure.
  500. //     pParentWnd -  Specifies the tab control's parent window, usually a CDialog.
  501. //                   It must not be NULL.
  502. //     nID -         Specifies the tab control's ID.
  503. // Returns:
  504. //     TRUE if initialization of the object was successful;
  505. //     otherwise FALSE.
  506. // Remarks:
  507. //     You construct a CXTExcelTabCtrl object in two steps. First,
  508. //     call the constructor, and then call Create, which creates the tab
  509. //     control and attaches it to the CXTExcelTabCtrl object. You
  510. //     can use the following tab control styles when creating the object:
  511. //
  512. //     * <b>FTS_XT_BOTTOM</b> Show tabs on bottom.
  513. //     * <b>FTS_XT_HASARROWS</b> Show back and next arrows.
  514. //     * <b>FTS_XT_HASHOMEEND</b> Show home and end arrows. Used with
  515. //           FTS_XT_HASARROWS.
  516. //     * <b>FTS_XT_TOOLTIPS</b> Show tab tooltips.
  517. //     * <b>FTS_XT_DEFAULT</b> Same as (FTS_XT_BOTTOM | FTS_XT_HASARROWS
  518. //           | FTS_XT_HASHOMEEND | FTS_XT_TOOLTIPS).
  519. //     * <b>FTS_XT_HSCROLL</b> Show a horizontal scroll bar.
  520. //     * <b>FTS_XT_MASK</b> Combines all FTS_ styles.
  521. //
  522. //     In addition to tab control styles, you can apply the following
  523. //     window styles to a tab control:
  524. //
  525. //     * <b>WS_CHILD</b> Creates a child window that represents the
  526. //           tab control. Cannot be used with the WS_POPUP style.
  527. //     * <b>WS_VISIBLE</b> Creates a tab control that is initially
  528. //           visible.
  529. //     * <b>WS_DISABLED</b> Creates a window that is initially
  530. //           disabled.
  531. //     * <b>WS_GROUP</b> Specifies the first control of a group of
  532. //           controls in which the user can move from one control to the next
  533. //           with the arrow keys. All controls defined with the WS_GROUP
  534. //           style after the first control belong to the same group. The next
  535. //           control with the WS_GROUP style ends the style group and
  536. //           starts the next group (that is, one group ends where the next
  537. //           begins).
  538. //     * <b>WS_TABSTOP</b> Specifies one of any number of controls
  539. //           through which the user can move by using the TAB key. The TAB key
  540. //           moves the user to the next control specified by the WS_TABSTOP
  541. //           style.
  542. // Example:
  543. //     The following code sample demonstrates the usage of Create.
  544. // <code>
  545. // // Create  the flat tab control.
  546. // if (!m_wndFlatTabCtrl.Create(WS_CHILD | WS_VISIBLE | FTS_XT_DEFAULT,
  547. //     m_rcTabs, this, IDC_FLAT_TABCTRL))
  548. // {
  549. //     TRACE0("Failed to create flattab controln");
  550. //     return;
  551. // }
  552. //
  553. // CreateViews();
  554. //
  555. // // Insert tabs into the flat tab control.
  556. // m_wndFlatTabCtrl.InsertItem(0, _T("Build"),           &m_sheet1);
  557. // m_wndFlatTabCtrl.InsertItem(1, _T("Debug"),           &m_sheet2);
  558. // m_wndFlatTabCtrl.InsertItem(2, _T("Find in Files 1"), &m_sheet3);
  559. // m_wndFlatTabCtrl.InsertItem(3, _T("Find in Files 2"), &m_sheet4);
  560. // m_wndFlatTabCtrl.InsertItem(4, _T("Results"),         &m_sheet5);
  561. // m_wndFlatTabCtrl.InsertItem(5, _T("SQL Debugging"),   &m_sheet6);
  562. // m_wndFlatTabCtrl.InsertItem(6, _T("Form View"),       m_pSheet7);
  563. // </code>
  564. // See Also:
  565. //     GetTabStyle, SetTabStyle
  566. // ----------------------------------------------------------------------------------------
  567. virtual BOOL Create(DWORD dwStyle, const CRect& rect, CWnd* pParentWnd, UINT nID);
  568. protected:
  569. //-----------------------------------------------------------------------
  570. // Summary:
  571. //     Call this function to determine which button, if any, is at the specified
  572. //     screen position.
  573. // Parameters:
  574. //     pt - A CPoint reference representing the specified screen position.
  575. // Returns:
  576. //     The zero-based index of the button within the button's array or -1 if no
  577. //     button is at the specified position.
  578. //-----------------------------------------------------------------------
  579. virtual int ButtonHitTest(CPoint& pt);
  580. //-----------------------------------------------------------------------
  581. // Summary:
  582. //     This member function will get the width in pixels of the tab specified
  583. //     by 'nItem'.
  584. // Parameters:
  585. //     nItem - The zero-based index of the tab to retrieve the width for.
  586. // Returns:
  587. //     The width in pixels of the tab.
  588. //-----------------------------------------------------------------------
  589. int GetTabWidth(int nItem) const;
  590. //-----------------------------------------------------------------------
  591. // Summary:
  592. //     This member function will return the total width of all the tabs
  593. //     in the flat tab control.
  594. // Returns:
  595. //     The total combined width in pixels of all the tabs in the control.
  596. //-----------------------------------------------------------------------
  597. int GetTotalTabWidth() const;
  598. //-----------------------------------------------------------------------
  599. // Summary:
  600. //     This member function will return the total width of all the arrow
  601. //     buttons that are visible in the flat tab control.
  602. // Returns:
  603. //     The total width in pixels of all the visible arrow buttons.
  604. //-----------------------------------------------------------------------
  605. int GetTotalArrowWidth() const;
  606. //-----------------------------------------------------------------------
  607. // Summary:
  608. //     This member function will return the total area width of all the
  609. //     tabs in the flat tab control.
  610. // Returns:
  611. //     The total area width in pixels of all the tabs in the flat tab control.
  612. //-----------------------------------------------------------------------
  613. int GetTotalTabAreaWidth() const;
  614. //-----------------------------------------------------------------------
  615. // Summary:
  616. //     This member function will force all of the tabs to be repainted.
  617. //-----------------------------------------------------------------------
  618. void InvalidateTabs();
  619. //-----------------------------------------------------------------------
  620. // Summary:
  621. //     This member function will enable or disable the arrow buttons
  622. //     depending on the current tab display state.
  623. //-----------------------------------------------------------------------
  624. void EnableButtons();
  625. //-----------------------------------------------------------------------
  626. // Summary:
  627. //     This member function will free the resources allocated for the
  628. //     icons used by the arrow buttons.
  629. //-----------------------------------------------------------------------
  630. void FreeButtonIcons();
  631. //-----------------------------------------------------------------------
  632. // Summary:
  633. //     This member function will create the icon resources that are
  634. //     used by the arrow buttons.
  635. //-----------------------------------------------------------------------
  636. void CreateButtonIcons();
  637. //-----------------------------------------------------------------------
  638. // Summary:
  639. //     This member function will draw the horizontal sizing gripper at a
  640. //     specified location.
  641. // Parameters:
  642. //     pDC  - Points to the device context to draw the gripper to.
  643. //     rect - Location of the gripper.
  644. //-----------------------------------------------------------------------
  645. void DrawGripper(CDC* pDC, CRect rect) const;
  646. //-----------------------------------------------------------------------
  647. // Summary:
  648. //     The member function is used internally to toggle the state of the
  649. //     sizing-grip tracking mode.
  650. // Parameters:
  651. //     bTracking - true to enable tracking, or false to disable tracking.
  652. //-----------------------------------------------------------------------
  653. void SetTracking(bool bTracking);
  654. //-----------------------------------------------------------------------
  655. // Summary:
  656. //     This member function frees all memory occupied by the tab items.
  657. //-----------------------------------------------------------------------
  658. void ClearAllItems();
  659. //-----------------------------------------------------------------------
  660. // Summary:
  661. //     This member function is called when the tab control is resized. It
  662. //     is responsible for updating internal structures that are dependent
  663. //     on the control's size.
  664. //-----------------------------------------------------------------------
  665. virtual void RecalcLayout();
  666. //-----------------------------------------------------------------------
  667. // Summary:
  668. //     This internal function deletes an item from the tab item list.
  669. // Parameters:
  670. //     nItem - Index of the tab to delete.
  671. // Returns:
  672. //     TRUE if successful, otherwise returns FALSE.
  673. //-----------------------------------------------------------------------
  674. virtual BOOL _DeleteItem(int nItem);
  675. //-----------------------------------------------------------------------
  676. // Summary:
  677. //     This internal function calculates the overlap between two tabs.
  678. // Returns:
  679. //     An integer value that represents the overlap between the tabs.
  680. //-----------------------------------------------------------------------
  681. virtual int GetOverlap() const;
  682. //-----------------------------------------------------------------------
  683. // Summary: Call this member function to remove the highlight from all of the buttons.
  684. //-----------------------------------------------------------------------
  685. void ResetMouseOver();
  686. //-----------------------------------------------------------------------
  687. // Summary: Call this member function to get the dimensions of the rectangle
  688. //          that encompasses all of the buttons.
  689. //-----------------------------------------------------------------------
  690. CRect GetTotalButtonRect() const;
  691. protected:
  692. //{{AFX_CODEJOCK_PRIVATE
  693. DECLARE_MESSAGE_MAP()
  694. //{{AFX_VIRTUAL(CXTExcelTabCtrl)
  695. virtual BOOL PreTranslateMessage(MSG* pMsg);
  696. virtual BOOL OnNotify(WPARAM, LPARAM lParam, LRESULT* pResult);
  697. //}}AFX_VIRTUAL
  698. //{{AFX_MSG(CXTExcelTabCtrl)
  699. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  700. afx_msg void OnPaint();
  701. void OnDraw(CDC* pDC);
  702. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM);
  703. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  704. afx_msg void OnLeftArrow();
  705. afx_msg void OnRightArrow();
  706. afx_msg void OnHomeArrow();
  707. afx_msg void OnEndArrow();
  708. afx_msg void OnSize(UINT nType, int cx, int cy);
  709. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  710. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  711. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  712. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  713. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  714. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  715. afx_msg void OnTimer(UINT_PTR nIDEvent);
  716. //}}AFX_MSG
  717. //}}AFX_CODEJOCK_PRIVATE
  718. private:
  719. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  720. protected:
  721. int m_cx;                 // Width for each arrow button.
  722. int m_cy;                 // Height for each arrow button.
  723. int m_nCurSel;            // Index of the currently selected tab.
  724. int m_nClientWidth;       // Width in pixels of the tab control client area.
  725. int m_nClientHeight;      // Height in pixels of the tab control client area.
  726. int m_nOffset;            // Amount in pixels of the displayed tab offset.
  727. int m_xGripperPos;        // The current gripper position in pixels from the left.
  728. int m_iGripperPosPerCent; // The current gripper position in percent of the control width.
  729. int m_xTrackingDelta;     // Tracking delta.
  730. int m_iBtnLeft;           // Index of "left" button in button array.
  731. int m_iBtnRight;          // Index of "right" button in button array.
  732. int m_iBtnHome;           // Index of "home" button in button array.
  733. int m_iBtnEnd;            // Index of "end" button in button array.
  734. int m_iBtnHilight;        // Index of the button that has the mouse hovering over it.
  735. bool m_bTracking;      // Tracking state.
  736. bool m_bManagingViews; // true if the control is managing views.
  737. bool m_bUserColors;    // true if user defined colors are used.
  738. bool m_bPainted;       // Set to TRUE to indicate that a button has been painted. FALSE otherwise.
  739. DWORD m_dwStyle;       // Tab control style.
  740. CWnd* m_pWndLastFocus; // Last focused window.
  741. CRect m_rectTabs;      // Area occupied by tabs.
  742. CRect m_rectViews;     // Area occupied by managed views.
  743. CRect m_rectSB_H;      // Area occupied by the horizontal scroll bar.
  744. CRect m_rectGripper;   // Area occupied by the sizing gripper.
  745. CFont* m_pNormFont; // Font that is used for non-selected tabs.
  746. CFont* m_pBoldFont; // Font that is used for selected tabs.
  747. CScrollBar                  m_wndHScrollBar; // The horizontal scroll bar (used with FTS_XT_HSCROLL).
  748. CToolTipCtrl                m_ToolTip;       // Tooltip for the flat tab control.
  749. CXTExcelTabCtrlButtonState  m_buttons[4];    // Array of button information.
  750. CTabItemArray               m_tcbItems;      // Template list containing tab information.
  751. };
  752. //////////////////////////////////////////////////////////////////////
  753. AFX_INLINE BOOL CXTExcelTabCtrl::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  754. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  755. }
  756. AFX_INLINE int CXTExcelTabCtrl::InsertItem(int nItem, UINT nTextID, CWnd* pWndControl) {
  757. ASSERT(IsWindow(m_hWnd)); CString strItem; VERIFY(strItem.LoadString(nTextID)); return InsertItem(nItem, strItem, pWndControl);
  758. }
  759. AFX_INLINE int CXTExcelTabCtrl::GetCurSel() const {
  760. ASSERT(IsWindow(m_hWnd)); return m_nCurSel;
  761. }
  762. AFX_INLINE int CXTExcelTabCtrl::GetItemCount() const {
  763. ASSERT(IsWindow(m_hWnd)); int iItemCount = (int)m_tcbItems.GetSize(); return iItemCount;
  764. }
  765. AFX_INLINE void CXTExcelTabCtrl::SetTabFonts(CFont* pNormFont, CFont* pBoldFont) {
  766. if (pNormFont){ m_pNormFont = pNormFont; } if (pBoldFont){ m_pBoldFont = pBoldFont; }
  767. }
  768. AFX_INLINE DWORD CXTExcelTabCtrl::GetTabStyle() {
  769. return m_dwStyle;
  770. }
  771. AFX_INLINE  CRect CXTExcelTabCtrl::GetTabsRect() {
  772. return m_rectTabs;
  773. }
  774. AFX_INLINE CFont* CXTExcelTabCtrl::GetTabFont(BOOL bBold) {
  775. return bBold ? m_pBoldFont : m_pNormFont;
  776. }
  777. const DWORD FTS_XT_BOTTOM          = 0x0001;  //<ALIAS CXTExcelTabCtrl::Create@DWORD@const CRect&@CWnd*@UINT>
  778. const DWORD FTS_XT_HASARROWS       = 0x0002;  //<ALIAS CXTExcelTabCtrl::Create@DWORD@const CRect&@CWnd*@UINT>
  779. const DWORD FTS_XT_HASHOMEEND      = 0x0004;  //<ALIAS CXTExcelTabCtrl::Create@DWORD@const CRect&@CWnd*@UINT>
  780. const DWORD FTS_XT_TOOLTIPS        = 0x0008;  //<ALIAS CXTExcelTabCtrl::Create@DWORD@const CRect&@CWnd*@UINT>
  781. const DWORD FTS_XT_DEFAULT         = 0x000F;  //<ALIAS CXTExcelTabCtrl::Create@DWORD@const CRect&@CWnd*@UINT>
  782. const DWORD FTS_XT_HSCROLL         = 0x0010;  //<ALIAS CXTExcelTabCtrl::Create@DWORD@const CRect&@CWnd*@UINT>
  783. const DWORD FTS_XT_MASK            = 0x001F;  //<ALIAS CXTExcelTabCtrl::Create@DWORD@const CRect&@CWnd*@UINT>
  784. //{{AFX_CODEJOCK_PRIVATE
  785. class _XTP_EXT_CLASS CXTFlatTabCtrl : public CXTExcelTabCtrl // deprecated.
  786. {
  787. DECLARE_DYNAMIC(CXTFlatTabCtrl)
  788. };
  789. //}}AFX_CODEJOCK_PRIVATE
  790. #endif // #if !defined(__XTEXCELTABCTRL_H__)