| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | 
							- #pragma once
 
- #include <afxtempl.h>
 
- #define SHEET_CLASSNAME		_T("_TabCtrlClass_")
 
- #define SHEET_CLASSTYLE		(CS_DBLCLKS)
 
- // Sheet styles
 
- #define SCS_SHEET			0x0000
 
- #define SCS_TAB				0x0001
 
- #define SCS_TOP				0x0002
 
- #define SCS_BOTTOM			0x0004
 
- #define SCS_BOLD			0x0008
 
- #define SCS_BORDER			0x0010
 
- #define SN_SETACTIVETAB		WM_APP + 1122
 
- typedef struct tagNMTABCHANGE{
 
-     NMHDR hdr;
 
-     long lOldTab;
 
-     long lNewTab;
 
- 	long lOldItemData;
 
- 	long lNewItemData;
 
- } NMTABCHANGE, FAR *LPNMTABCHANGE;
 
- /////////////////////////////////////////////////////////////////////////////
 
- // CTabCtrlEx window
 
- class CTabCtrlEx : public CWnd
 
- {
 
- // Construction
 
- public:
 
- 	CTabCtrlEx();
 
- public:
 
- // Overrides
 
- 	// ClassWizard generated virtual function overrides
 
- 	//{{AFX_VIRTUAL(CTabCtrlEx)
 
- 	public:
 
- 	//}}AFX_VIRTUAL
 
- // Implementation
 
- public:
 
- 	virtual ~CTabCtrlEx();
 
- 	// Create the sheet control
 
- 	virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
 
- 	// Add a new window to the sheet. Returns the index of the new tab, -1 on error
 
- 	bool AddItem(const CString& csTabTitle, CWnd* pTabWnd);
 
- 	// Insert a new window in the sheet. Returns the index of the new tab, -1 on error
 
- 	bool InsertItem(int nTab, const CString& csTabTitle, CWnd* pTabWnd);
 
- 	
 
- 	//Replaces the window in nTab position -- Calls HideWindow for the old and ShowWindow for the new
 
- 	bool ReplaceItem(int nTab, const CString &csTabTitle, CWnd* pTabWnd);
 
- 	// Delete a tab in the sheet
 
- 	bool DeleteItem(int nTab);
 
- 	// Delete all tabs in the sheet
 
- 	bool DeleteAllItems();
 
- 	
 
- 	// Get/Set the tab title
 
- 	CString GetTabTitle(int nTab);
 
- 	bool SetTabTitle(int nTab, const CString& csTabTitle);
 
- 	// Get the active sheet
 
- 	int GetActiveTab();
 
- 	// Get the number of tabs
 
- 	int GetTabCount();
 
- 	// Set the active tab and make the tab title visible
 
- 	void SetActiveTab(int nTab, bool bNotify = true);
 
- 	bool SetTabItemData(int nTab, long lItemData);
 
- 	long GetTabItemData(int nTab);
 
- 	// Make a tab title visible
 
- 	void MakeTabVisible(int nTab);
 
- 	
 
- 	// Set the tab height
 
- 	void SetTabHeight(int nTabHeight);
 
- 	// Relay keyboard events for the sheet to process,
 
- 	// returns TRUE if the message was processed, DO NOT process this message
 
- 	// return FALSE if the message was not processed
 
- 	virtual BOOL PreTranslateMessage(MSG* pMsg);
 
- 	// Underline a tab title, use color -1 to remove underline
 
- 	void UnderlineTabTitle(int nTab, COLORREF clr);
 
- 	void SetFocusToNewlySelectedTab(bool bVal)	{ m_bSetFocusToNewlySelectedTab = bVal;	}
 
- 	bool GetFocusToNewlySelectedTab()			{ return m_bSetFocusToNewlySelectedTab;	}
 
- 	void SetTabColors(COLORREF Selected, COLORREF NonSelected)	{ m_SelectedColor = Selected; m_NonSelectedColor = NonSelected;}
 
- protected:
 
- 	class CTab
 
- 	{
 
- 	public:
 
- 		CTab()
 
- 		{
 
- 			lItemData = -1;
 
- 		}
 
- 		CString csTitle;
 
- 		CWnd* pWnd;
 
- 		long lWidth;
 
- 		COLORREF clrUnderline;
 
- 		long lItemData;
 
- 	};
 
- 	typedef enum {ArrowLeft, ArrowRight} ButtonStyle;
 
- 	typedef enum {BtnDown, BtnUp/*, BtnHover*/} ButtonState;
 
- 		
 
- protected:
 
- 	short m_nStyle;
 
- 	CArray <CTab, CTab&> m_Tabs;
 
- 	int m_nActiveTab;
 
- 	int m_nTabHeight;
 
- 	CBrush m_brSelectedTab;
 
- 	CBrush m_brNonSelectedTab;
 
- 	CPen m_penGray;
 
- 	CPen m_penBlack;
 
- 	CFont *m_pFntText, *m_pFntBoldText;
 
- 	ButtonState m_btnState[2];
 
- 	bool m_bBtnEnabled[2];
 
- 	int m_nLeftShifted;
 
- 	int m_nPrevWidth;
 
- 	bool m_bSetFocusToNewlySelectedTab;
 
- 	COLORREF m_SelectedColor;
 
- 	COLORREF m_NonSelectedColor;
 
- 	
 
- protected:
 
- 	int GetTextWidth(const CString& csText);
 
- 	int GetDisplayWidth();
 
- 	int GetTabsWidth();
 
- 	int GetSpinnerWidth();
 
- 	
 
- 	void GetFullRect(CRect& rcTab);
 
- 	void GetTabListRect(CRect& rcTab);
 
- 	void GetTabRect(int nTab, CRect& rcTab);
 
- 	void GetSpinnerRect(CRect& rcButton);
 
- 	void GetButtonRect(int nBtn, CRect& rcBtn);
 
- 	void EnableSpinners();
 
- 	void DrawTabs(CDC *pDC);
 
- 	void DrawBar(CDC* pDC);
 
- 	void DrawTab(int nTab, CDC *pDC, CRect& rcTab);
 
- 	void DrawTabEx(int nTab, CDC *pDC, CRect& rcTab);
 
- 	void DrawSpinner(CDC *pDC);
 
- 	void DrawButton(CDC *pDC, CRect& rcBtn, ButtonState btnState, ButtonStyle btnStyle, bool bEnable);
 
- 	void ScrollTab(CPoint point);
 
- 	
 
- 	void ActivateTab(int nTab, bool bNotify, bool bOnSize = false);
 
- 	void ResizeTabWindow(int nOldTab, int nNewTab, bool bNotify, bool bOnSize);
 
- 	void SwitchTabs(bool bNext = true);
 
- 	
 
- 	// Generated message map functions
 
- protected:
 
- 	//{{AFX_MSG(CTabCtrlEx)
 
- 	afx_msg void OnPaint();
 
- 	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 
- 	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 
- 	afx_msg void OnTimer(UINT_PTR nIDEvent);
 
- 	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
 
- 	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
 
- 	afx_msg void OnSize(UINT nType, int cx, int cy);
 
- 	afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
 
- 	//}}AFX_MSG
 
- 	DECLARE_MESSAGE_MAP()
 
- };
 
 
  |