www.pudn.com > mu_explorer.rar > CJFlatTabCtrl.h
// FlatTab.h : header file // // Copyright © 1999 Ian Brumby // // This source code may be used in compiled form in any way you desire. // Source file(s) may be redistributed unmodified by any means PROVIDING // they are not sold for profit without the authors expressed written consent, // and providing that this notice and the authors name and all copyright // notices remain intact. // // ========================================================================== // HISTORY: // ========================================================================== // 1.4 21 Jul 1999 - Initial release. // 1.5 30 Aug 1999 - Several enhancements by Phil Baxter //// ========================================================================== // Excel uses FF_ROMAN and Font Height = ~(control's height - 4) // Excel draws its tabs right to left // Excel has 3DLIGHT highlighting on the left diagonal // Excel has home/end buttons // Excel's buttons change width as the control's height changes // ///////////////////////////////////////////////////////////////////////////// /**************************************************************************** * * $Date: 10/26/99 10:40p $ * $Revision: 8 $ * $Archive: /CodeJock/Include/CJFlatTabCtrl.h $ * * $History: CJFlatTabCtrl.h $ * * ***************** Version 8 ***************** * User: Kirk Stowell Date: 10/26/99 Time: 10:40p * Updated in $/CodeJock/Include * Made class methods virtual for inheritance purposes. * * ***************** Version 7 ***************** * User: Kirk Stowell Date: 10/24/99 Time: 12:15a * Updated in $/CodeJock/Include * Fixed minor bug with tab font creation. * * ***************** Version 6 ***************** * User: Kirk Stowell Date: 10/24/99 Time: 12:01a * Updated in $/CodeJock/Include * Fixed potential resource and memory leak problems. * * ***************** Version 5 ***************** * User: Kirk Stowell Date: 10/14/99 Time: 12:25p * Updated in $/CodeJock/Include * Added source control history to file header. * ***************************************************************************/ ///////////////////////////////////////////////////////////////////////////// #ifndef __CCJFLATTABCTRL_H__ #define __CCJFLATTABCTRL_H__ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include "CJMetaFileButton.h" // control styles #define FTS_BOTTOM 0x0002 #define FTS_HASARROWS 0x0004 #define FTS_HASHOMEEND 0x0008 // Must be used with FTS_HASARROWS /* typedef struct tagFlatTabItem { CWnd* pWnd; CString strItemText; CString szToolTipLabel; } FLATTABITEM,*LPFLATTABITEM; typedef CList CTabList; */ typedef CList CTabList; typedef CList CTabWndList; // CCJFlatTabCtrl is a CWnd derived class which is used to create a flat tab // control simular to DevStudio. class CCJFlatTabCtrl : public CWnd { // Construction public: CCJFlatTabCtrl(); // Attributes public: // Operations public: virtual BOOL InsertItem(const int nItem, LPCTSTR lpszItem,CWnd* pWnd); virtual BOOL DeleteItem(int nItem); virtual BOOL DeleteAllItems(); virtual BOOL GetItemRect(int nItem, LPRECT lpRect); virtual int HitTest(TCHITTESTINFO *pHitTestInfo) const; virtual int GetCurSel() const {return m_iCurSel;} virtual int SetCurSel(int nItem); virtual int GetItemCount() const { return m_TabList.GetCount(); } virtual void SetTipText(int nItem, LPCTSTR lpszTabTip); virtual CString GetTipText(int nItem); virtual void Home(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CCJFlatTabCtrl) protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual BOOL PreTranslateMessage(MSG* pMsg); //}}AFX_VIRTUAL // Implementation public: BOOL SetItemSel(CWnd* pWnd); BOOL SetItemText(CWnd* pWnd,LPCTSTR lpszItem); CWnd* GetItemWnd(int nItemIndex); BOOL SetItemText(const int nItem,LPCTSTR lpszItem); void SetMaxTabWidth(int nMaxTabWidth); virtual ~CCJFlatTabCtrl(); // Generated message map functions protected: //{{AFX_MSG(CCJFlatTabCtrl) afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnLeftArrow(); afx_msg void OnRightArrow(); afx_msg void OnHomeArrow(); afx_msg void OnEndArrow(); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: void CreateTabFont(const int iTabHeight); int GetTabWidth(const int nItem) const; int GetTotalArrowWidth(void) const; int GetTotalTabWidth(void) const; void InvalidateTabs(void); void EnableButtons(void); int DrawTab(CDC &dc, const int x, const int y, const int iHeight, bool bSelected, bool bBottom, LPCTSTR lpszTab) const; bool m_bHasArrows; bool m_bHasHomeEnd; bool m_bTabsOnBottom; int m_iCurSel; int m_iClientWidth; int m_iClientHeight; int m_iTotalTabWidth; int m_iXOffset; CTabList m_TabList; CTabWndList m_TabWndList; CTabList m_TabTipList; CFont m_Font; CFont m_BoldFont; CCJMetaFileButton *m_pLeftButton; CCJMetaFileButton *m_pRightButton; CCJMetaFileButton *m_pHomeButton; CCJMetaFileButton *m_pEndButton; HENHMETAFILE m_hLeftArrow; HENHMETAFILE m_hLeftArrowDisabled; HENHMETAFILE m_hRightArrow; HENHMETAFILE m_hRightArrowDisabled; HENHMETAFILE m_hHomeArrow; HENHMETAFILE m_hHomeArrowDisabled; HENHMETAFILE m_hEndArrow; HENHMETAFILE m_hEndArrowDisabled; CToolTipCtrl m_ToolTip; int m_nMaxTabWidth; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // __CCJFLATTABCTRL_H__