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__