OutBarCtrl.h
上传用户:zslianheng
上传日期:2013-04-03
资源大小:946k
文件大小:6k
源码类别:

Linux/Unix编程

开发平台:

Visual C++

  1. /***************************************************************************
  2.  *                                                                         *
  3.  *   This program is free software; you can redistribute it and/or modify  *
  4.  *   it under the terms of the GNU General Public License as published by  *
  5.  *   the Free Software Foundation; either version 2 of the License, or     *
  6.  *   (at your option) any later version.                                   *
  7.  *                                                                         *
  8.  *   copyright            : (C) 2002 by Zhang Yong                         *
  9.  *   email                : z-yong163@163.com                              *
  10.  ***************************************************************************/
  11. #if !defined(AFX_OUTBARCTRL_H__72EE7AA0_C4F1_41A5_9D86_14B7023231C7__INCLUDED_)
  12. #define AFX_OUTBARCTRL_H__72EE7AA0_C4F1_41A5_9D86_14B7023231C7__INCLUDED_
  13. #if _MSC_VER > 1000
  14. #pragma once
  15. #endif // _MSC_VER > 1000
  16. // OutBarCtrl.h : header file
  17. //
  18. #include <vector>
  19. using namespace std;
  20. class OutBarListener {
  21. public:
  22. virtual void renamed(int obj, int index, const char *text) = 0;
  23. virtual void itemDragged(int item, int toFolder) = 0;
  24. virtual void selFolderChanged(int folder) = 0;
  25. virtual void itemClicked(int item) = 0;
  26. virtual void itemDoubleClicked(int item) = 0;
  27. virtual void rightButtonDown(int obj, int index) = 0;
  28. };
  29. class OutBarItem {
  30. public:
  31. OutBarItem(const char *t, int img)
  32. : text(t), image(img) {}
  33. virtual ~OutBarItem() {}
  34. CString text;
  35. int image;
  36. };
  37. class OutBarFolder {
  38. public:
  39. OutBarFolder(const char *t) : text(t) {
  40. scrollPos = 0;
  41. }
  42. ~OutBarFolder();
  43. void addItem(const char *t, int image);
  44. CString text;
  45. vector<OutBarItem *> items;
  46. int scrollPos;
  47. };
  48. #define FOLDER_HEIGHT 22
  49. #define LARGE_ICON_W 32
  50. #define LARGE_ICON_H 32
  51. #define SMALL_ICON_W 16
  52. #define SMALL_ICON_H 16
  53. #define ICON_OFFSET 5
  54. #define LARGE_ITEM_H 48
  55. #define SMALL_ITEM_H 22
  56. typedef int HIT;
  57. #define MAKEHIT(obj, index) ((obj << 16) + index)
  58. #define HITOBJ(hit) (hit >> 16)
  59. #define HITINDEX(hit) (hit & 0xffff)
  60. #define HITNONE MAKEHIT(HT_NONE, -1)
  61. class OutBarEdit;
  62. /////////////////////////////////////////////////////////////////////////////
  63. // OutBarCtrl window
  64. class OutBarCtrl : public CWnd {
  65. // Construction
  66. public:
  67. enum {
  68. HT_NONE,
  69. HT_FOLDER,
  70. HT_ITEM,
  71. HT_SCROLL
  72. };
  73. OutBarCtrl();
  74. // Attributes
  75. public:
  76. void setListener(OutBarListener *l) {
  77. listener = l;
  78. }
  79. int getFolderCount() {
  80. return folders.size();
  81. }
  82. int getSelFolder() {
  83. return selFolder;
  84. }
  85. void getFolderName(int i, CString &name);
  86. int getItemCount() {
  87. return getItemCount(selFolder);
  88. }
  89. int getItemCount(int folder);
  90. void setBgColor(COLORREF color) {
  91. bgColor = color;
  92. repaintInsideRect();
  93. }
  94. void setFontColor(COLORREF color) {
  95. fontColor = color;
  96. repaintInsideRect();
  97. }
  98. void setImageList(CImageList *largeList, CImageList *smallList) {
  99. largeIcons = largeList;
  100. smallIcons = smallList;
  101. }
  102. BOOL isLargeIconView() {
  103. return largeIconView;
  104. }
  105. void setIconView(BOOL large) {
  106. largeIconView = large;
  107. repaintInsideRect();
  108. }
  109. int hitObj() {
  110. return HITOBJ(lastHit);
  111. }
  112. int hitIndex() {
  113. return HITINDEX(lastHit);
  114. }
  115. void scrollToPos(int i) {
  116. scrollPos() = i;
  117. repaintInsideRect();
  118. }
  119. // Operations
  120. public:
  121. void removeFolder(int i);
  122. void removeAllFolders();
  123. void removeItem(int i);
  124. void repaintInsideRect();
  125. void setSelFolder(int i);
  126. int addFolder(const char *text);
  127. void addItem(int folder, const char *text, int image);
  128. void insertItem(int folder, int pos, OutBarItem *item);
  129. void addFolderUI();
  130. void renameUI();
  131. void resizeEditCtrl();
  132. void onEditFinished();
  133. void onEditCanceled();
  134. protected:
  135. enum {
  136. SCROLL_DIR_UP,
  137. SCROLL_DIR_DOWN
  138. };
  139. virtual int getMaxVisibleItem();
  140. virtual void drawBackground(CDC *pDC, CRect &rc);
  141. virtual void drawItemText(CDC *pDC, int i, COLORREF color);
  142. virtual void drawFolder(CDC *pDC, int i, BOOL pressed = FALSE, BOOL hilight = FALSE);
  143. virtual void drawScroll(CDC *pDC, int i, BOOL pressed = FALSE);
  144. int getCountPerPage();
  145. void getFolderRect(CRect &rc, int i);
  146. void getInsideRect(CRect &rc);
  147. void getItemRect(CRect &rc, int i);
  148. void getIconRect(CRect &rc, int i);
  149. void getLabelRect(CRect &rc, int i);
  150. void getScrollRect(CRect &rc, int i);
  151. void drawItem(CDC *pDC, int i, BOOL redraw = FALSE);
  152. void drawItemImage(CDC *pDC, int i, CRect &rc);
  153. void drawFolderText(CDC *pDC, int i, CRect &rc);
  154. void hilightItem(CDC *pDC, int i, BOOL pressed = FALSE);
  155. HIT hitTest(const CPoint &pt);
  156. BOOL canScroll(int dir);
  157. void scroll(int dir, int delta = 1);
  158. inline int &scrollPos();
  159. OutBarListener *listener;
  160. CImageList *largeIcons;
  161. CImageList *smallIcons;
  162. vector<OutBarFolder *> folders;
  163. int selFolder;
  164. COLORREF bgColor;
  165. COLORREF fontColor;
  166. HIT lastHit;
  167. HIT pressedHit;
  168. int clickedItem;
  169. int dragItem;
  170. BOOL largeIconView;
  171. OutBarEdit *editCtrl;
  172. HCURSOR currentCursor;
  173. HCURSOR handCursor;
  174. HCURSOR forbiddenCursor;
  175. HCURSOR dragCursor;
  176. // Overrides
  177. // ClassWizard generated virtual function overrides
  178. //{{AFX_VIRTUAL(OutBarCtrl)
  179. //}}AFX_VIRTUAL
  180. // Implementation
  181. public:
  182. virtual ~OutBarCtrl();
  183. // Generated message map functions
  184. protected:
  185. //{{AFX_MSG(OutBarCtrl)
  186. afx_msg void OnPaint();
  187. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  188. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  189. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  190. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  191. afx_msg void OnTimer(UINT nIDEvent);
  192. afx_msg void OnSize(UINT nType, int cx, int cy);
  193. afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  194. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  195. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  196. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  197. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  198. //}}AFX_MSG
  199. afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
  200. DECLARE_MESSAGE_MAP()
  201. };
  202. /////////////////////////////////////////////////////////////////////////////
  203. //{{AFX_INSERT_LOCATION}}
  204. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  205. #endif // !defined(AFX_OUTBARCTRL_H__72EE7AA0_C4F1_41A5_9D86_14B7023231C7__INCLUDED_)