SkinTabCtrl.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #pragma once
  2. #include "SkinUI.h"
  3. #include "ISkinControl.h"
  4. // CSkinTabCtrl
  5. #define TCN_DROPDOWN (NM_FIRST-5)
  6. #define STCI_STYLE_BUTTON 0x0000
  7. #define STCI_STYLE_DROPDOWN 0x0008
  8. class SKINUI_CLASS CSkinTabCtrlItem
  9. {
  10. public:
  11. CSkinTabCtrlItem(void);
  12. ~CSkinTabCtrlItem(void);
  13. public:
  14. int m_nID;
  15. DWORD m_dwStyle;
  16. int m_nWidth, m_nHeight;
  17. int m_nLeftWidth, m_nRightWidth;
  18. int m_nPadding;
  19. CString m_strText;
  20. CString m_strToolTipText;
  21. CImageEx * m_lpBgImgN, * m_lpBgImgH, * m_lpBgImgD;
  22. CImageEx * m_lpArrowImgH, * m_lpArrowImgD;
  23. CImageEx * m_lpIconImg, * m_lpSelIconImg;
  24. };
  25. //////////////////////////////////////////////////////////////////////////
  26. typedef vector<CSkinTabCtrlItem *> CTabCtrlItemArray;
  27. class SKINUI_CLASS CSkinTabCtrl : public CTabCtrl,public ISkinControl
  28. {
  29. DECLARE_DYNAMIC(CSkinTabCtrl)
  30. protected:
  31. CToolTipCtrl m_ToolTipCtrl;
  32. CTabCtrlItemArray m_ItemArray;
  33. CImageEx * m_lpBack;
  34. CImageEx * m_lpItemBgImgN, * m_lpItemBgImgH, * m_lpItemBgImgD;
  35. CImageEx * m_lpArrowImgH, * m_lpArrowImgD;
  36. int m_nSelIndex, m_nHoverIndex;
  37. BOOL m_bPressArrow;
  38. BOOL m_bMouseTracking;
  39. int m_nLeft, m_nTop;
  40. CPoint m_ptPaddingText;
  41. //函数定义
  42. public:
  43. //构造函数
  44. CSkinTabCtrl();
  45. //析构函数
  46. virtual ~CSkinTabCtrl();
  47. //资源设置
  48. public:
  49. //背景资源
  50. BOOL SetBackImage(LPCTSTR lpszFileName, CONST LPRECT lprcNinePart=NULL);
  51. //节点资源
  52. BOOL SetItemsImage(LPCTSTR lpNormal, LPCTSTR lpHighlight, LPCTSTR lpDown, CONST LPRECT lprcNinePart=NULL);
  53. //下拉按钮
  54. BOOL SetItemsArrowImage(LPCTSTR lpHighlight, LPCTSTR lpDown);
  55. //节点资源设置
  56. public:
  57. //节点背景
  58. BOOL SetItemBack(int nIndex, LPCTSTR lpNormal, LPCTSTR lpHighlight, LPCTSTR lpDown, CONST LPRECT lprcNinePart=NULL);
  59. //下拉按钮
  60. BOOL SetItemArrowImage(int nIndex, LPCTSTR lpHighlight, LPCTSTR lpDown);
  61. //图标资源
  62. BOOL SetItemIconImage(int nIndex, LPCTSTR lpIcon, LPCTSTR lpSelIcon);
  63. //界面辅助
  64. public:
  65. //设置节点起始坐标
  66. void SetLeftTop(int nLeft, int nTop);
  67. //节点大小
  68. CSize SetItemSize(CSize size,CONST LPSIZE lpszArrow=NULL);
  69. //节点偏移
  70. void SetItemPadding(int nIndex, int nPadding);
  71. //点击测试
  72. int HitTest(POINT pt);
  73. //绘制节点
  74. void DrawItem(CDC*pDC, int nIndex);
  75. //功能函数
  76. public:
  77. //获取节点数量
  78. int GetItemCount();
  79. //获取当前选择
  80. int GetCurSel();
  81. //设置当前选择
  82. void SetCurSel(int nCurSel);
  83. //添加节点
  84. int AddItem(int nID, DWORD dwStyle=STCI_STYLE_BUTTON);
  85. //设置节点ID
  86. void SetItemID(int nIndex, int nID);
  87. //节点风格
  88. void SetItemStyle(int nIndex, int dwStyle);
  89. //节点文字
  90. void SetItemText(int nIndex, LPCTSTR lpszText);
  91. //节点提示
  92. void SetItemToolTipText(int nIndex, LPCTSTR lpszText);
  93. //
  94. void SetPaddingText(int nPadding){ m_ptPaddingText = nPadding; }
  95. //私有成员
  96. private:
  97. //获取矩形
  98. BOOL GetItemRectByIndex(int nIndex, CRect& rect);
  99. //获取矩形
  100. BOOL GetItemRectByID(int nID, CRect& rect);
  101. //获取节点
  102. CSkinTabCtrlItem * GetItemByIndex(int nIndex);
  103. //获取节点
  104. CSkinTabCtrlItem * GetItemByID(int nID);
  105. //消息函数
  106. public:
  107. //背景重绘
  108. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  109. //绘制消息
  110. afx_msg void OnPaint();
  111. //左键按下
  112. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  113. //鼠标移动
  114. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  115. //鼠标移开
  116. LRESULT OnMouseLeave(WPARAM wparam, LPARAM lparam);
  117. //销毁消息
  118. afx_msg void OnDestroy();
  119. public:
  120. //解析消息
  121. virtual BOOL PreTranslateMessage(MSG* pMsg);
  122. //设置属性
  123. virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
  124. //设置属性
  125. virtual void ParseItem(CXmlNode *root);
  126. //创建控件
  127. virtual BOOL CreateControl(CWnd* pParentWnd);
  128. protected:
  129. DECLARE_MESSAGE_MAP()
  130. };