www.pudn.com > TabBar.rar > TabBarCtrl.h, change:2006-04-06,size:14711b


// tabbarctrl.h : interface of the CTabBarCtrl class. 
 
#if !defined(AFX_TABBARCTRL_H_INCLUDED_) 
#define AFX_TABBARCTRL_H_INCLUDED_ 
 
#if _MSC_VER >= 1000 
#pragma once 
#endif // _MSC_VER >= 1000 
 
#include "afxcoll.h" 
#include "resource.h" 
 
#define WM_TABBARCTRL_NOTIFY    WM_USER + 1 
#define NM_TB_FOLDERCHANGE      1 
#define NM_TB_FOLDERSCROLLBEGIN 2 
#define NM_TB_FOLDERSCROLLEND   3 
#define NM_TB_ITEMCHANGE        4 
#define NM_TB_ADDFOLDER         5 
#define NM_TB_INSERTITEM        6 
#define NM_TB_REMOVEFOLDER      7 
#define NM_TB_REMOVEITEM        8 
#define NM_TB_ONFOLDER          9 
#define NM_TB_ONITEM            10 
#define NM_TB_RESETALLITEMS     11 
#define NM_TB_DRAGITEMBEGIN     12 
#define NM_TB_DRAGITEMEND       13 
#define NM_TB_ITEMMOVE          14 
#define NM_TB_DBLCLKITEM        15 
#define NM_TB_FOLDERENDEDIT     16 
 
#define TABBARCTRL_BLOCKTRACKER_BORDERWIDTH 3 
#define TABBARCTRL_BLOCKTRACKER_DELAYTIME   500 
#define TABBARCTRL_FOLDERFRONTCOLOR         GetSysColor(COLOR_3DFACE) 
#define TABBARCTRL_FOLDERBACKGROUNDCOLOR    GetSysColor(COLOR_BTNSHADOW) 
#define TABBARCTRL_FOLDERLIGHTBORDER        GetSysColor(COLOR_BTNHILIGHT) 
#define TABBARCTRL_FOLDERSHADOWBORDER       GetSysColor(COLOR_BTNSHADOW) 
#define TABBARCTRL_FOLDERTEXTCOLOR          GetSysColor(COLOR_WINDOWTEXT) 
#define TABBARCTRL_ITEMTEXTCOLOR            GetSysColor(COLOR_WINDOWTEXT) 
#define TABBARCTRL_ITEMHILIGHTCOLOR         GetSysColor(COLOR_BTNHILIGHT) 
#define TABBARCTRL_ITEMSHADOWCOLOR          GetSysColor(COLOR_BTNSHADOW) 
#define TABBARCTRL_CHILDBACKGROUNDCOLOR     GetSysColor(COLOR_BTNFACE) 
#define TABBARCTRL_ITEMHIGHLIGHTCOLOR       GetSysColor(COLOR_BTNFACE) 
#define TABBARCTRL_FOLDERHIGHLIGHTCOLOR     RGB(220, 220, 220) 
#define TABBARCTRL_ITEMSELECTEDCOLOR        RGB(220, 220, 220) 
#define TABBARCTRL_ITEMHORZSPACE            10 
#define TABBARCTRL_ITEMVERTSPACE            10 
#define TABBARCTRL_FOLDERHEIGHT             22 
#define TABBARCTRL_FOLDERBORDERWIDTH        1 
#define TABBARCTRL_FOLDERSCROLLSTEP         20 
#define TABBARCTRL_ANIMATIONTICKCOUNT       20 
#define TABBARCTRL_ITEMBORDERWIDTH          1 
#define TABBARCTRL_DELAYTIME                100 
 
///////////////////////////////////////////////////////////////////////////// 
// class CItemTracker 
 
class CItemTracker : public CRectTracker 
{ 
// Construction\Destruction 
public: 
	CItemTracker(); 
	virtual ~CItemTracker(); 
 
// Attributes 
public: 
	CRect m_FirstRect; // first set rectangle 
 
// Operations 
public:	 
	BOOL Track(CWnd* pWnd, CPoint Point, BOOL bAllowInvert = FALSE, CWnd* pWndClipTo = NULL); 
protected: 
	BOOL TrackHandle(int nHandle, CWnd* pWnd, CPoint Point, CWnd* pWndClipTo); 
 
// Overrides 
	//{{AFX_VIRTUAL(CItemTracker) 
	public: 
	virtual void OnChangedRect(const CRect& OldRect); 
	//}}AFX_VIRTUAL 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// class CFolderAddDlg 
 
class CFolderAddDlg : public CDialog 
{ 
// Construction 
public: 
	CFolderAddDlg(CWnd* pParent = NULL);   // standard constructor 
 
// Dialog Data 
	//{{AFX_DATA(CFolderAddDlg) 
	enum { IDD = IDD_TABBARCTRL }; 
	CString	m_AddFolderName; 
		// NOTE: the ClassWizard will add data members here 
	//}}AFX_DATA 
 
// Overrides 
	//{{AFX_VIRTUAL(CFolderAddDlg) 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support 
	virtual BOOL OnInitDialog(); 
	//}}AFX_VIRTUAL 
 
// Generated message map functions 
	//{{AFX_MSG(CFolderAddDlg) 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// class CFolderEdit 
 
class CFolderEdit : public CEdit 
{ 
 
// Construction\Destruction 
public: 
	CFolderEdit(); 
	virtual ~CFolderEdit(); 
 
// Attributes 
public: 
	CString m_EditString; 
	int     m_nIndex; 
protected: 
	BOOL m_bEscapeKeyPressed; 
 
// Overrides 
	//{{AFX_VIRTUAL(CFolderEdit) 
	public: 
	virtual BOOL PreTranslateMessage(MSG* pMsg); 
	protected: 
	virtual void PostNcDestroy(); 
	//}}AFX_VIRTUAL 
 
// Generated message map functions 
protected: 
	//{{AFX_MSG(CFolderEdit) 
	afx_msg int  OnCreate(LPCREATESTRUCT lpCreateStruct); 
	afx_msg void OnKillFocus(CWnd* pNewWnd); 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// CTabBarCtrl class 
 
class CTabBarCtrl : public CWnd 
{ 
	DECLARE_DYNCREATE(CTabBarCtrl) 
 
// outbarctrl hittest 
	enum 
	{ 
		htNothing = -1, 
		htFolder, 
		htItem, 
		htUpScroll, 
		htDownScroll 
	}; 
 
// outbarctrl item class 
public: 
	class CTabBarItem 
	{ 
	// Construction\Destruction 
	public: 
		CTabBarItem(CString ItemString, int nImageIndex, DWORD dwExData); 
		virtual ~CTabBarItem() {}; 
	// Attributes 
	public: 
		int     m_nImageIndex; // outbarctrl item used image 
		CString m_ItemString;  // outbarctrl item text 
		DWORD   m_dwExData;    // outbarctrl item extend data 
		BOOL    m_bSelected;   // outbarctrl item selected flag 
		BOOL    m_bHighted;    // outbarctrl item highted flag 
	}; 
 
// outbarctrl folder item class 
	class CTabBarFolder 
	{ 
	// Construction\Destruction 
	public: 
		CTabBarFolder(CString FolderString, DWORD dwExData); 
		virtual ~CTabBarFolder(); 
	// Attributes 
	public: 
		CString   m_FolderString; // outbarctrl folder item text 
		DWORD     m_dwExData;     // outbarctrl folder item extend data 
		CPtrArray m_ItemList;     // outbarctrl folder item list 
		CWnd*     m_pChildWnd;    // outbarctrl folder item child window 
		BOOL      m_bHighted;     // outbarctrl folder highted flag 
	// Operations 
	public: 
		int GetItemCount() const; 
		int InsertItem(int nItemInsertIndex, CString ItemString, int nItemImage, DWORD dwExData); 
	}; 
 
// Construction\Destruction 
public: 
	CTabBarCtrl(); 
	virtual ~CTabBarCtrl(); 
 
// Attributes 
protected: 
	BOOL        m_bCreateToolTip;         // the tool tip window create flag 
	BOOL        m_bToolTip;               // the tool tip window show flag 
	CImageList* m_pImageList;             // item small image list 
	COLORREF    m_FolderBackGroundColor;  // the folder background color 
	COLORREF    m_FolderFrontColor;       // the folder frontground color 
	COLORREF    m_ChildBackGroundColor;   // the child window background color 
	COLORREF    m_FolderLightColor;       // the folder normal light color 
	COLORREF    m_FolderShadowColor;      // the folder shadow color 
	COLORREF    m_FolderTextColor;        // the folder text color 
	COLORREF    m_ItemTextColor;          // the item text color 
	COLORREF    m_ItemLightColor;         // the item normal light color 
	COLORREF    m_ItemShadowColor;        // the item shadow color 
	COLORREF    m_ItemHighlightColor;     // the item normal highlight color 
	COLORREF    m_ItemSelectedColor;      // the item selected color 
	COLORREF    m_FolderHighlightColor;   // the folder highlight color 
	CPtrArray   m_FolderList;             // outbarctrl folder item list 
	CWnd        m_ToolTip;                // the tool tip window 
	HCURSOR     m_hHandCursor;            // hand cursor 
	int         m_nRButtonHitItemIndex;   // record the mouse right button hit item index 
	int         m_nRButtonHitFolderIndex; // record the mouse right button hit folder index 
	int         m_nItemBorderWidth;       // the item border width 
	int         m_nFolderBorderWidth;     // the folder border width 
	int         m_nSelFolder;             // the current selected folder index 
	int         m_nFolderHeight;          // the folder height 
	int         m_nHorzSpace;             // items horizontal space 
	int         m_nVertSpace;             // items vertical space 
	int         m_nDelayTime;             // the item tool tip delay time 
	long		m_lAnimationTickCount;    // the folder animation timer 
 
// Operations 
protected: 
	void AnimateFolderScroll(int nFromFolder, int nToFolder); // folder scroll animation when the folder move a new position 
	BOOL CreateToolTip(); // create the tool tip 
	BOOL DragItem(CPoint Point, int nItemIndex); // drag the item from the folder to another folder 
	CMenu* GetMenu(); // get the tabbar control menu 
	BOOL HideToolTip(); // hide the tool tip 
	void HighlightFolder(int nFolderIndex); // highlight the folder 
	void HighlightItem(int nItemIndex); // highlight the item 
	void OnStartFolderEdit(int nFolderIndex); // start the folder edit 
	void SelectItem(int nItemIndex); // select the item 
	BOOL ShowToolTip(int nItemIndex); // show the tool tip 
public: 
	void EnableToolTip(BOOL bToolTip) {m_bToolTip = bToolTip;}; // enable the tool tip 
	long GetAnimationTickCount() {return m_lAnimationTickCount;}; // get the folder animation tick count 
	CWnd* GetFolderChild(int nFolderIndex) const; // get the folder child window pointer 
	const int GetFolderCount() {return m_FolderList.GetSize();}; // get the folder count 
	DWORD GetFolderData(int nFolderIndex) const; // get the specified folder extend data 
	void GetFolderRect(CRect& FolderRect, int nFolderIndex); // get the specified folder rectangle 
	CString GetFolderText(int nFolderIndex) const; // get the specified folder text 
	int GetHightedFolder() const; // get the highted folder 
	int GetHightedItem(int nFolderIndex) const; // get the highted item in the specified folder 
	const CImageList* GetImageList() {return m_pImageList;}; // get the images 
	void GetInsideRect(CRect& ChildRect); // get the current child window rectangle 
	int GetItemCount(int nFolderIndex) const; // get the items count in the specified folder 
	DWORD GetItemData(int nItemIndex, int nFolderIndex) const; // get the specified item extend data in the specified folder 
	int  GetItemImage(int nItemIndex, int nFolderIndex) const; // get the specified item image index in the specified folder 
	BOOL GetItemRect(CRect& ItemRect, int nItemIndex, int nFolderIndex); // get the specified item rectangle in the specified folder 
	CSize GetItemSize(int nItemIndex, int nFolderIndex) const; // get the specified item size in the specified folder 
	CString GetItemText(int nItemIndex, int nFolderIndex) const; // get the specified item text in the specified folder 
	const int GetSelelectedFolder() {return m_nSelFolder;}; // get the current selected folder index 
	int GetSelectedItem(int nFolderIndex) const; // get the selected item in the specified folder 
	void ResetAllHightedItems(int nFolderIndex); // reset all highted items in the specified folder 
	void ResetAllSelectedItems(int nFolderIndex); // reset all selected items in the specified folder 
	void SetAnimationTickCount(long value) {m_lAnimationTickCount = value;}; // set the folder animation tick count 
	void SetFolderText(int nFolderIndex, CString TextString); // set the folder text 
	CImageList* SetImageList(CImageList* pImageList); // set the images 
	void SetItemData(int nItemIndex, int nFolderIndex, DWORD dwData); // set the specified item data in the specified folder 
	void SetItemImage(int nItemIndex, int nFolderIndex, int nImageIndex); // set the specified item image index in the specified folder 
	void SetItemText(int nItemIndex, int nFolderIndex, CString TextString); // set the specified item text in the specified folder 
	void SetSelectedFolder(int nFolderIndex); // set the current selected folder 
	void SetSelectedItem(int nItemIndex, int nFolderIndex); // set the selected item in the specified folder 
 
// Overrides 
	//{{AFX_VIRTUAL(CTabBarCtrl) 
	public: 
	virtual int  AddFolder(CString FolderName, DWORD dwExData = 0); 
	virtual int  AddFolderBar(CString FolderName, CWnd* pChildWnd, DWORD dwExData = 0); 
	virtual BOOL Create(DWORD dwStyle, CRect Rect, CWnd* pParentWnd, UINT nID); 
	virtual BOOL CreateEx(DWORD dwExStyle, DWORD dwStyle, CRect Rect, CWnd* pParentWnd, UINT nID); 
	virtual int  HitTestEx(CPoint Point, int& nIndex); 
	virtual int  InsertItem(int nFolderIndex, int nItemIndex, CString ItemName, int nImageIndex = -1, DWORD dwExData = 0); 
	virtual void RemoveFolder(int nFolderIndex); 
	virtual void RemoveItem(int nItemIndex, int nFolderIndex); 
	protected: 
	virtual void DrawFolder(CDC* pDrawDC, int nFolderIndex, CRect FolderRect); 
	virtual void DrawItem(CDC* pDrawDC, int nFolderIndex, CRect ItemRect, int nItemIndex); 
	virtual void PaintItems(CDC* pDrawDC, int nFolder, CRect Rect); 
	//}}AFX_VIRTUAL 
 
// Diagnostics 
protected: 
	virtual void AssertFolderIndex(int nFolderIndex) const; 
	virtual void AssertItemIndex(int nItemIndex, int nFolderIndex) const; 
 
// Generated message map functions 
protected: 
	//{{AFX_MSG(CTabBarCtrl) 
	afx_msg void OnAddFolder(); 
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint Point); 
	afx_msg int  OnCreate(LPCREATESTRUCT lpCreateStruct); 
	afx_msg long OnEndFolderEdit(WPARAM wParam, LPARAM lParam); 
	afx_msg BOOL OnEraseBkgnd(CDC* pDrawDC); 
	afx_msg void OnLButtonDblClk(UINT nFlags, CPoint Point); 
	afx_msg void OnLButtonDown(UINT nFlags, CPoint Point); 
	afx_msg void OnMouseMove(UINT nFlags, CPoint Point); 
	afx_msg void OnPaint(); 
	afx_msg void OnRemoveItem(); 
	afx_msg void OnRenameItem(); 
	afx_msg void OnSize(UINT nType, int cx, int cy); 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
inline CTabBarCtrl::CTabBarItem::CTabBarItem(CString ItemString, int nImageIndex, DWORD dwExData) 
{ 
	ASSERT(!ItemString.IsEmpty()); 
	m_ItemString  = ItemString; 
	m_nImageIndex = nImageIndex; 
	m_dwExData    = dwExData; 
	m_bSelected   = FALSE; 
	m_bHighted    = FALSE; 
} 
 
inline CTabBarCtrl::CTabBarFolder::CTabBarFolder(CString FolderString, DWORD dwExData) 
{ 
	m_FolderString  = FolderString; 
	m_dwExData      = dwExData; 
	m_pChildWnd     = NULL; 
	m_bHighted      = FALSE; 
} 
 
inline CTabBarCtrl::CTabBarFolder::~CTabBarFolder() 
{ 
	for(int i = 0; i < m_ItemList.GetSize(); i++) 
	{ 
		if(m_ItemList.GetAt(i)) 
			delete (CTabBarFolder*)m_ItemList.GetAt(i); 
	} 
	m_ItemList.RemoveAll(); 
} 
 
inline int CTabBarCtrl::CTabBarFolder::GetItemCount() const 
{ 
	return m_ItemList.GetSize(); 
} 
 
inline int CTabBarCtrl::CTabBarFolder::InsertItem(int nItemIndex, CString ItemString, int nImageIndex, DWORD dwExData) 
{ 
	ASSERT(nItemIndex >= 0 && nItemIndex <= m_ItemList.GetSize()); 
	CTabBarItem* pBarItem = new CTabBarItem(ItemString, nImageIndex, dwExData); 
	ASSERT(pBarItem); 
	if(nItemIndex < m_ItemList.GetSize())  
		m_ItemList.InsertAt(nItemIndex, (void*)pBarItem); 
	else  
		nItemIndex = m_ItemList.Add((void*)pBarItem); 
	return nItemIndex; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Developer Studio will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_TABBARCTRL_H_INCLUDED_)