SkinComboBox.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. #ifndef COMBOX_HEAD_FILE
  2. #define COMBOX_HEAD_FILE
  3. #pragma once
  4. #include "SkinUI.h"
  5. #include "ISkinControl.h"
  6. #define WM_CBO_EDIT_MOUSE_HOVER WM_USER + 1
  7. #define WM_CBO_EDIT_MOUSE_LEAVE WM_USER + 2
  8. #define WM_CBO_LIST_HIDE WM_USER + 3
  9. #define WM_CBO_LIST_RBUTTONUP WM_USER + 4
  10. #define WM_CBO_RBUTTONUP WM_USER + 5
  11. //////////////////////////////////////////////////////////////////////////
  12. class SKINUI_CLASS CSkinComboBox_Edit :public CEdit,public ISkinControl
  13. {
  14. //基本变量
  15. protected:
  16. HWND m_hOwnerWnd; //组合框句柄
  17. BOOL m_bMouseTracking; //鼠标事件
  18. BOOL m_bIsDefText; //默认文本
  19. CString m_strDefText; //文本内容
  20. //函数定义
  21. public:
  22. //构造函数
  23. CSkinComboBox_Edit(void);
  24. //析构函数
  25. ~CSkinComboBox_Edit(void);
  26. //重载函数
  27. protected:
  28. //消息循环
  29. virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  30. //设置函数
  31. public:
  32. //设置句柄
  33. void SetOwnerWnd(HWND hWnd);
  34. //默认文本
  35. void SetDefaultText(LPCTSTR lpszText);
  36. //默认文本
  37. BOOL IsDefaultText();
  38. //文本形式
  39. void SetDefaultTextMode(BOOL bIsDefText);
  40. //消息定义
  41. public:
  42. //重绘背景
  43. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  44. //鼠标移动
  45. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  46. //鼠标移开
  47. afx_msg void OnMouseLeave();
  48. //设置焦点
  49. afx_msg void OnSetFocus(CWnd* pOldWnd);
  50. //销毁焦点
  51. afx_msg void OnKillFocus(CWnd* pNewWnd);
  52. //颜色反射
  53. afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
  54. //左键按下
  55. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  56. //左键双击
  57. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  58. //鼠标样式
  59. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  60. protected:
  61. DECLARE_MESSAGE_MAP()
  62. };
  63. //////////////////////////////////////////////////////////////////////////
  64. class SKINUI_CLASS CSkinComboBox_ListBox : public CListBox,public ISkinControl
  65. {
  66. //基本变量
  67. protected:
  68. HWND m_hOwnerWnd; //组合框句柄
  69. //资源定义
  70. public:
  71. CImageEx * m_pBackImgN; //正常资源
  72. CImageEx * m_pSelectImg; //选中资源
  73. //函数定义
  74. public:
  75. //构造函数
  76. CSkinComboBox_ListBox(void);
  77. //析构函数
  78. ~CSkinComboBox_ListBox(void);
  79. //设置函数
  80. public:
  81. //设置句柄
  82. void SetOwnerWnd(HWND hWnd);
  83. //绘画边框
  84. void DrawListFrame();
  85. //资源加载
  86. public:
  87. //正常背景
  88. BOOL SetBackNormalImage(LPCTSTR lpszFileName, CONST LPRECT lpNinePart = NULL);
  89. //选中资源
  90. BOOL SetSelectImage(LPCTSTR lpszFileName, CONST LPRECT lpNinePart = NULL);
  91. //消息定义
  92. private:
  93. //显示窗口
  94. afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
  95. //窗口销毁
  96. afx_msg void OnDestroy();
  97. //重载函数
  98. protected:
  99. //控件重绘
  100. virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
  101. protected:
  102. DECLARE_MESSAGE_MAP()
  103. public:
  104. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  105. };
  106. //////////////////////////////////////////////////////////////////////////
  107. class SKINUI_CLASS CSkinComboBox : public CComboBox,public ISkinControl
  108. {
  109. DECLARE_DYNAMIC(CSkinComboBox)
  110. //资源变量
  111. protected:
  112. CImageEx * m_lpBgImgN; //Edit背景
  113. CImageEx * m_lpBgImgH; //Edit高亮
  114. CImageEx * m_lpArrowImgN; //按钮正常
  115. CImageEx * m_lpArrowImgH; //按钮高亮
  116. CImageEx * m_lpArrowImgP; //按钮按下
  117. //状态变量
  118. protected:
  119. BOOL m_bFocus, m_bPress, m_bHover, m_bMouseTracking; //鼠标状态
  120. BOOL m_bArrowPress, m_bArrowHover; //按钮状态
  121. int m_nArrowWidth; //按钮宽度
  122. CRect m_rcArrow; //按钮区域
  123. UINT m_cyItemHeight;
  124. int m_nEditHeight;
  125. //控件变量
  126. protected:
  127. CSkinComboBox_Edit m_SkinComboBoxEdit; //Edit控件
  128. CSkinComboBox_ListBox m_SkinComboBoxList; //ListBox控件
  129. //函数定义
  130. public:
  131. //构造函数
  132. CSkinComboBox();
  133. //析构函数
  134. virtual ~CSkinComboBox();
  135. //资源设置
  136. public:
  137. //Edit背景
  138. BOOL SetBgNormalPic(LPCTSTR lpszFileName, RECT * lpNinePart = NULL);
  139. //Edit高亮
  140. BOOL SetBgHotPic(LPCTSTR lpszFileName, RECT * lpNinePart = NULL);
  141. //按钮正常
  142. BOOL SetArrowNormalPic(LPCTSTR lpszFileName);
  143. //按钮高亮
  144. BOOL SetArrowHotPic(LPCTSTR lpszFileName);
  145. //按钮按下
  146. BOOL SetArrowPushedPic(LPCTSTR lpszFileName);
  147. //加载资源
  148. BOOL SetScrollImage(LPCTSTR pszFileName);
  149. //设置函数
  150. public:
  151. //设置文本
  152. void SetDefaultText(LPCTSTR lpszText);
  153. //默认文本
  154. BOOL IsDefaultText();
  155. //按钮宽度
  156. void SetArrowWidth(int nWidth);
  157. //按钮检测
  158. bool VerdictOverButton(CPoint MousePoint);
  159. //设置DropList
  160. void SetDropList();
  161. //文本颜色
  162. void SetEditTextColor(COLORREF col);
  163. //设置高度
  164. void SetAllItemHeight(UINT cyItemHeight);
  165. //设置高度
  166. void SetEditItemHeight(UINT cyItemHeight){ m_nEditHeight = cyItemHeight; }
  167. //
  168. int GetEditItemHeight(){ return m_nEditHeight; }
  169. //控件句柄
  170. public:
  171. //Edit句柄
  172. CSkinComboBox_Edit *GetEditWnd();
  173. //ListBox句柄
  174. CSkinComboBox_ListBox *GetListBoxWnd();
  175. //重载函数
  176. protected:
  177. //子类化
  178. virtual void PreSubclassWindow();
  179. virtual void MeasureItem(LPMEASUREITEMSTRUCT /*lpMeasureItemStruct*/);
  180. //设置属性
  181. virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
  182. //设置属性
  183. virtual void ParseItem(CXmlNode *root);
  184. //创建控件
  185. virtual BOOL CreateControl(CWnd* pParentWnd);
  186. //消息循环
  187. public:
  188. //创建消息
  189. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  190. //重绘背景
  191. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  192. //绘制背景
  193. afx_msg void OnPaint();
  194. //左键按下
  195. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  196. //鼠标移动
  197. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  198. //鼠标移开
  199. afx_msg void OnMouseLeave();
  200. //窗口销毁
  201. afx_msg void OnDestroy();
  202. //窗口尺寸
  203. afx_msg void OnSize(UINT nType, int cx, int cy);
  204. //ListBox消息
  205. afx_msg LRESULT OnCtlColorListBox(WPARAM wParam, LPARAM lParam);
  206. //自定义消息
  207. public:
  208. //Edit高亮
  209. LRESULT OnEditMouseHover(WPARAM wParam, LPARAM lParam);
  210. //Edit移开
  211. LRESULT OnEditMouseLeave(WPARAM wParam, LPARAM lParam);
  212. //Edit移开
  213. LRESULT OnRButtonUp(WPARAM wParam, LPARAM lParam);
  214. //ListBox收缩
  215. LRESULT OnListHide(WPARAM wParam, LPARAM lParam);
  216. protected:
  217. DECLARE_MESSAGE_MAP()
  218. };
  219. #endif