CustomTabCtrl.h
上传用户:huashan618
上传日期:2013-03-26
资源大小:261k
文件大小:8k
- #pragma once
- /**********************************************************************
- **
- ** CustomTabCtrl.h : include file
- **
- ** by Andrzej Markowski June 2004
- **
- **********************************************************************/
- #include <Afxtempl.h>
- #include <afxcmn.h>
- #include "themeutil.h"
- #define TAB_SHAPE1 0 // Invisible
- #define TAB_SHAPE2 1 // __
- // | /
- // |/
- #define TAB_SHAPE3 2 // |
- // |/
- #define TAB_SHAPE4 3 // ____________
- // /
- // ________/
- #define TAB_SHAPE5 4 // ___________
- //
- // ________/
- #define RECALC_PREV_PRESSED 0
- #define RECALC_NEXT_PRESSED 1
- #define RECALC_ITEM_SELECTED 2
- #define RECALC_RESIZED 3
- #define RECALC_FIRST_PRESSED 4
- #define RECALC_LAST_PRESSED 5
- //#define RECALC_EDIT_RESIZED 6
- #define MAX_LABEL_TEXT 30
- #define DEF_SWITCH_HEIGHT 28
- #define DEF_STOWND_LENGTH 2
- //定义窗口的类型,以执行相应的操作
- #define WND_TYPE_CWND 0 //CWnd对象建立的窗口
- #define WND_TYPE_HTMLVIEW 1 //CHtmlView创建的窗口
- #define WND_TYPE_GENVIEW 2 //普通的视类窗口
- typedef struct _CTC_NMHDR
- {
- NMHDR hdr;
- int nItem;
- TCHAR pszText[MAX_LABEL_TEXT];
- CWnd* lParam;//LPARAM
- //CWnd* childwnd;
- RECT rItem;
- POINT ptHitTest;
- BOOL fSelected;
- BOOL fHighlighted;
- } CTC_NMHDR;
- class CCustomTabCtrlItem
- {
- friend class CCustomTabCtrl;
- private:
- CCustomTabCtrlItem(CString sText,/*LPARAM*/CWnd* lParam);
- void ComputeRgn();
- void Draw(CDC& dc, CFont& font);
- BOOL HitTest(CPoint pt) { return (m_bShape && m_rgn.PtInRegion(pt)) ? TRUE : FALSE; }
- void GetRegionPoints(const CRect& rc, CPoint* pts) const;
- void GetDrawPoints(const CRect& rc, CPoint* pts) const;
- void operator=(const CCustomTabCtrlItem &other);
- private:
- CString m_sText;
- BOOL m_wType;//窗口类型
- CWnd* m_lParam;/*LPARAM*/
- CRect m_rect;
- CRect m_rectText;
- CRgn m_rgn;
- BYTE m_bShape;
- BOOL m_fSelected;
- BOOL m_fHighlighted;
- BOOL m_fHighlightChanged;
- BOOL m_OpenURL;
- };
- // CCustomTabCtrl
- // styles
- #define CTCS_FIXEDWIDTH 1 // Makes all tabs the same width.
- #define CTCS_FOURBUTTONS 2 // Four buttons (First, Prev, Next, Last)
- #define CTCS_AUTOHIDEBUTTONS 4 // Auto hide buttons
- #define CTCS_TOOLTIPS 8 // Tooltips
- #define CTCS_MULTIHIGHLIGHT 16 // Multi highlighted items
- #define CTCS_EDITLABELS 32 // Allows item text to be edited in place
- #define CTCS_DRAGMOVE 64 // Allows move items
- #define CTCS_DRAGCOPY 128 // Allows copy items
- // hit test
- #define CTCHT_ONFIRSTBUTTON -1
- #define CTCHT_ONPREVBUTTON -2
- #define CTCHT_ONNEXTBUTTON -3
- #define CTCHT_ONLASTBUTTON -4
- #define CTCHT_NOWHERE -5
- // notification messages
- #define CTCN_CLICK 1
- #define CTCN_RCLICK 2
- #define CTCN_SELCHANGE 3
- #define CTCN_HIGHLIGHTCHANGE 4
- #define CTCN_ITEMMOVE 5
- #define CTCN_ITEMCOPY 6
- #define CTCN_LABELUPDATE 7
- #define CTCN_OUTOFMEMORY 8
- #define CTCID_FIRSTBUTTON -1
- #define CTCID_PREVBUTTON -2
- #define CTCID_NEXTBUTTON -3
- #define CTCID_LASTBUTTON -4
- #define CTCID_NOBUTTON -5
- #define CTCID_EDITCTRL 1
- #define REPEAT_TIMEOUT 250
- // error codes
- #define CTCERR_NOERROR 0
- #define CTCERR_OUTOFMEMORY -1
- #define CTCERR_INDEXOUTOFRANGE -2
- #define CTCERR_NOEDITLABELSTYLE -3
- #define CTCERR_NOMULTIHIGHLIGHTSTYLE -4
- #define CTCERR_ITEMNOTSELECTED -5
- #define CTCERR_ALREADYINEDITMODE -6
- #define CTCERR_TEXTTOOLONG -7
- #define CTCERR_NOTOOLTIPSSTYLE -8
- #define CTCERR_CREATETOOLTIPFAILED -9
- // button states
- #define BNST_INVISIBLE 0
- #define BNST_NORMAL DNHZS_NORMAL
- #define BNST_HOT DNHZS_HOT
- #define BNST_PRESSED DNHZS_PRESSED
- #define CustomTabCtrl_CLASSNAME _T("CCustomTabCtrl") // Window class name
- class CCustomTabCtrl : public CWnd
- {
- public:
- // Construction
- CWnd* m_oldwnd;
- CCustomTabCtrl();
- virtual ~CCustomTabCtrl();
- BOOL Create(UINT dwStyle, const CRect & rect, CWnd * pParentWnd, UINT nID);
- // Attributes
- int GetItemCount() {return (int)m_aItems.GetSize();}
- int GetCurSel() { return m_nItemSelected; }
- int SetCurSel(int nItem);
- int IsItemHighlighted(int nItem);
- int HighlightItem(int nItem, BOOL fHighlight);
- int GetItemText(int nItem, CString& sText);
- int SetItemText(int nItem, CString sText);
- int GetItemRect(int nItem, CRect& rect) const;
- int SetItemTooltipText(int nItem, CString sText);
- void SetDragCursors(HCURSOR hCursorMove, HCURSOR hCursorCopy);
- BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags);
- void SetControlFont(const LOGFONT& lf, BOOL fRedraw=FALSE);
- static const LOGFONT& GetDefaultFont() {return lf_default;}
-
- // Operations
- // int InsertItem(int nItem, CString sText, LPARAM lParam=0);
- int InsertItem(int nItem, CString sText, CWnd* childwnd=NULL);
- CWnd* InsertItem(int nItem,CString sText,CRuntimeClass *pViewClass);
- int DeleteItem(int nItem);
- void DeleteAllItems();
- int MoveItem(int nItemSrc, int nItemDst);
- int CopyItem(int nItemSrc, int nItemDst);
- int HitTest(CPoint pt);
- void ResetWindowSize(CRect& rect);
- void ResetSwitchWidth(int width);
- // Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CCustomTabCtrl)
- protected:
- virtual void PreSubclassWindow();
- virtual BOOL PreTranslateMessage(MSG* pMsg);
- //}}AFX_VIRTUAL
- protected:
- //{{AFX_MSG(CCustomTabCtrl)
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
- //afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
- afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
- afx_msg LONG OnMouseLeave(WPARAM wParam, LPARAM lParam);
- afx_msg LONG OnThemeChanged(WPARAM wParam, LPARAM lParam);
- afx_msg void OnMouseMove(UINT nFlags, CPoint point);
- afx_msg void OnPaint();
- afx_msg void OnSize(UINT nType, int cx, int cy);
- //afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
- afx_msg void OnTimer(UINT nIDEvent);
- //afx_msg void OnUpdateEdit();
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- private:
- void RecalcLayout(int nRecalcType,int nItem);
- //void RecalcEditResized(int nOffset, int nItem);
- void RecalcOffset(int nOffset);
- int RecalcRectangles();
- BOOL RegisterWindowClass();
- int ProcessLButtonDown(int nHitTest, UINT nFlags, CPoint point);
- int MoveItem(int nItemSrc, int nItemDst, BOOL fMouseSel);
- int CopyItem(int nItemSrc, int nItemDst, BOOL fMouseSel);
- int SetCurSel(int nItem, BOOL fMouseSel, BOOL fCtrlPressed);
- int HighlightItem(int nItem, BOOL fMouseSel, BOOL fCtrlPressed);
- void DrawGlyph(CDC& dc, CPoint& pt, int nImageNdx, int nColorNdx);
- void DrawBkLeftSpin(CDC& dc, CRect& r, int nImageNdx);
- void DrawBkRightSpin(CDC& dc, CRect& r, int nImageNdx);
- BOOL NotifyParent(UINT code, int nItem, CPoint pt);
- //int EditLabel(int nItem, BOOL fMouseSel);
- private:
- //----------------------------
- CRect m_rClient;
- int m_hSwitch;
- //BOOL m_orgial;
- //-----------------------------
- static LOGFONT lf_default;
- static BYTE m_bBitsGlyphs[];
- HCURSOR m_hCursorMove;
- HCURSOR m_hCursorCopy;
- CFont m_Font;
- CFont m_FontSelected;
- int m_nItemSelected;
- int m_nItemNdxOffset;
- int m_nItemDragDest;
- int m_nPrevState;
- int m_nNextState;
- int m_nFirstState;
- int m_nLastState;
- int m_nButtonIDDown;
- DWORD m_dwLastRepeatTime;
- COLORREF m_rgbGlyph[4];
- CBitmap m_bmpGlyphsMono;
- HBITMAP m_hBmpBkLeftSpin;
- BOOL m_fIsLeftImageHorLayout;
- MY_MARGINS m_mrgnLeft;
- MY_MARGINS m_mrgnRight;
- HBITMAP m_hBmpBkRightSpin;
- BOOL m_fIsRightImageHorLayout;
- CToolTipCtrl m_ctrlToolTip;
- //CEdit m_ctrlEdit;
- CArray <CCustomTabCtrlItem*,CCustomTabCtrlItem*> m_aItems;
- // 切换显示的窗口
- void SwitchWindows(CWnd* curwnd=NULL);
- public:
- afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
- };