SkinToolBar.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. #ifndef SKIN_TOOLBAR_EAD_FILE
  2. #define SKIN_TOOLBAR_EAD_FILE
  3. #pragma once
  4. #include "SkinUI.h"
  5. #include "ISkinControl.h"
  6. // CSkinToolBar
  7. #define STBI_STYLE_BUTTON 0x0000
  8. #define STBI_STYLE_SEPARTOR 0x0001
  9. #define STBI_STYLE_CHECK 0x0002
  10. #define STBI_STYLE_DROPDOWN 0x0008
  11. #define STBI_STYLE_WHOLEDROPDOWN 0x0080
  12. // STBI_STYLE_WHOLEDROPDOWN不要和STBI_STYLE_CHECK一起用
  13. // STBI_STYLE_DROPDOWN不要和STBI_STYLE_WHOLEDROPDOWN一起用
  14. class CSkinToolBarItem
  15. {
  16. public:
  17. CSkinToolBarItem(void);
  18. ~CSkinToolBarItem(void);
  19. public:
  20. int m_nID;
  21. DWORD m_dwStyle;
  22. int m_nWidth, m_nHeight;
  23. int m_nLeftWidth, m_nRightWidth;
  24. int m_nPadding;
  25. CString m_strText;
  26. CString m_strToolTipText;
  27. BOOL m_bChecked;
  28. CImageEx * m_lpBgImgN, * m_lpBgImgH, * m_lpBgImgD;
  29. CImageEx * m_lpLeftH, * m_lpLeftD;
  30. CImageEx * m_lpRightH, * m_lpRightD;
  31. CImageEx * m_lpSepartorImg;
  32. CImageEx * m_lpArrowImg;
  33. CImageEx * m_lpIconImg;
  34. };
  35. //////////////////////////////////////////////////////////////////////////
  36. class SKINUI_CLASS CSkinToolBar : public CWnd,public ISkinControl
  37. {
  38. DECLARE_DYNAMIC(CSkinToolBar)
  39. protected:
  40. CToolTipCtrl m_ToolTipCtrl;
  41. std::vector<CSkinToolBarItem *> m_arrItems;
  42. CImageEx * m_lpBgImg;
  43. int m_nPressIndex, m_nHoverIndex;
  44. BOOL m_bPressLorR, m_bHoverLorR;
  45. BOOL m_bMouseTracking;
  46. int m_nLeft, m_nTop;
  47. BOOL m_bAutoSize;
  48. //函数定义
  49. public:
  50. //构造函数
  51. CSkinToolBar();
  52. //析构函数
  53. virtual ~CSkinToolBar();
  54. //重载函数
  55. protected:
  56. //设置属性
  57. virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
  58. //设置属性
  59. virtual void ParseItem(CXmlNode *root);
  60. //创建控件
  61. virtual BOOL CreateControl(CWnd* pParentWnd);
  62. //资源加载
  63. public:
  64. //背景资源
  65. BOOL SetItemBgPic(int nIndex, LPCTSTR lpNormal, LPCTSTR lpHighlight, LPCTSTR lpDown, CONST LPRECT lprcNinePart);
  66. //左边背景
  67. BOOL SetItemLeftBgPic(int nIndex, LPCTSTR lpHighlight, LPCTSTR lpDown, CONST LPRECT lprcNinePart);
  68. //右边背景
  69. BOOL SetItemRightBgPic(int nIndex, LPCTSTR lpHighlight, LPCTSTR lpDown, CONST LPRECT lprcNinePart);
  70. //分离图片
  71. BOOL SetItemSepartorPic(int nIndex, LPCTSTR lpszFileName);
  72. //箭头图片
  73. BOOL SetItemArrowPic(int nIndex, LPCTSTR lpszFileName);
  74. //图标资源
  75. BOOL SetItemIconPic(int nIndex, LPCTSTR lpszFileName);
  76. //背景资源
  77. BOOL SetBgPic(LPCTSTR lpszFileName, CONST LPRECT lprcNinePart);
  78. //功能函数
  79. public:
  80. //左上角位置
  81. void SetLeftTop(int nLeft, int nTop);
  82. //自动尺寸
  83. void SetAutoSize(BOOL bAutoSize);
  84. //添加节点
  85. int AddItem(int nID, DWORD dwStyle);
  86. //设置风格
  87. void SetItemStyle(int nIndex, int dwStyle);
  88. //节点ID
  89. void SetItemID(int nIndex, int nID);
  90. //节点大小
  91. void SetItemSize(int nIndex, int nWidth, int nHeight, int nLeftWidth = 0, int nRightWidth = 0);
  92. //节点偏移
  93. void SetItemPadding(int nIndex, int nPadding);
  94. //节点文本
  95. void SetItemText(int nIndex, LPCTSTR lpszText);
  96. //提示标签
  97. void SetItemToolTipText(int nIndex, LPCTSTR lpszText);
  98. //获取矩形
  99. BOOL GetItemRectByIndex(int nIndex, CRect& rect);
  100. //获取矩形
  101. BOOL GetItemRectByID(int nID, CRect& rect);
  102. //获取check
  103. BOOL GetItemCheckState(int nIndex);
  104. //设置check
  105. void SetItemCheckState(int nIndex, BOOL bChecked);
  106. //获取节点
  107. CSkinToolBarItem * GetItemByIndex(int nIndex);
  108. //获取节点
  109. CSkinToolBarItem * GetItemByID(int nID);
  110. //点击测试
  111. int HitTest(POINT pt);
  112. //绘图节点
  113. void DrawItem(CDC*pDC, int nIndex);
  114. //消息函数
  115. public:
  116. //擦出背景
  117. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  118. //重绘消息
  119. afx_msg void OnPaint();
  120. //左键按下
  121. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  122. //左键抬起
  123. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  124. //鼠标移动
  125. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  126. //鼠标离开
  127. afx_msg LRESULT OnMouseLeave(WPARAM wparam, LPARAM lparam);
  128. //窗口销毁
  129. afx_msg void OnDestroy();
  130. //消息循环
  131. virtual BOOL PreTranslateMessage(MSG* pMsg);
  132. //创建控件
  133. virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  134. protected:
  135. DECLARE_MESSAGE_MAP()
  136. };
  137. #endif