XTPScrollBar.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:16k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPScrollBar.h : interface for the CXTPScrollBar class.
  2. //
  3. // This file is a part of the XTREME COMMANDBARS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPSCROLLBAR_H__)
  22. #define __XTPSCROLLBAR_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #define XTP_HTSCROLLUP          60          // <combine CXTPScrollBase::HitTestScrollBar@POINT>
  28. #define XTP_HTSCROLLDOWN        61          // <combine CXTPScrollBase::HitTestScrollBar@POINT>
  29. #define XTP_HTSCROLLUPPAGE      62          // <combine CXTPScrollBase::HitTestScrollBar@POINT>
  30. #define XTP_HTSCROLLDOWNPAGE    63          // <combine CXTPScrollBase::HitTestScrollBar@POINT>
  31. #define XTP_HTSCROLLTHUMB       64          // <combine CXTPScrollBase::HitTestScrollBar@POINT>
  32. #define XTP_HTSCROLLPOPUP       65          // <combine CXTPScrollBase::HitTestScrollBar@POINT>
  33. #include "Common/XTPWinThemeWrapper.h"
  34. //-------------------------------------------------------------------------
  35. // Summary: Scroll Bar style
  36. // See Also: CXTPScrollBase::SetScrollBarStyle
  37. //-------------------------------------------------------------------------
  38. enum XTPScrollBarStyle
  39. {
  40. xtpScrollStyleDefault,          // Default style
  41. xtpScrollStyleStandard,         // standard window theme
  42. xtpScrollStyleFlat,             // Flat scrollbar style
  43. xtpScrollStyleSystem,           // WinXP themed style
  44. xtpScrollStyleOffice,           // Office scrollbar style
  45. xtpScrollStyleOffice2007Light,  // Office 2007 light style
  46. xtpScrollStyleOffice2007Dark,   // Office 2007 dark style
  47. xtpScrollStyleSlider,
  48. };
  49. class CXTPScrollBarPaintManager;
  50. const UINT XTP_SBN_SCROLL    = 0x1007;
  51. struct NMXTPSCROLL
  52. {
  53. NMHDR   hdr;            // NMHDR structure that contains additional information about this notification.
  54. CObject* pSender;
  55. int nSBCode;
  56. int nPos;
  57. };
  58. //===========================================================================
  59. // Summary:
  60. //     CXTPScrollBase is base class for all scrollbale objects
  61. //===========================================================================
  62. class _XTP_EXT_CLASS CXTPScrollBase
  63. {
  64. public:
  65. //===========================================================================
  66. // Summary:
  67. //     The SCROLLBARPOSINFO structure contains scroll bar information.
  68. //===========================================================================
  69. struct SCROLLBARPOSINFO
  70. {
  71. int    posMin;  // Minimum position
  72. int    posMax;  // Maximum position
  73. int    page;    // Page size
  74. int    pos;     // Position of thumb
  75. int    pxTop;   // Top bounding rectangle
  76. int    pxBottom;// Bottom bounding rectangle
  77. int    pxLeft;  // Left bounding rectangle
  78. int    pxRight; // Right bounding rectangle
  79. int    cpxThumb;// Size of thumb button
  80. int    pxUpArrow;   // Position of Up arrow
  81. int    pxDownArrow; // Position of Down arrow
  82. int    pxStart;     // Previous position of thumb button
  83. int    pxThumbBottom;   // Thumb bottom bounding rectangle
  84. int    pxThumbTop;      // Thumb top bounding rectangle
  85. int    pxPopup; // In-place scroll position
  86. int    cpx;     // position in pixels
  87. int    pxMin;   // Minimum position in pixels
  88. RECT   rc;      // Bounding rectangle
  89. int    ht;      // Hit test
  90. BOOL   fVert;   // TRUE if vertical
  91. };
  92. //===========================================================================
  93. // Summary:
  94. //     The SCROLLBARTRACKINFO structure contains tracking information.
  95. //===========================================================================
  96. struct SCROLLBARTRACKINFO
  97. {
  98. BOOL   fHitOld;     // Previous hittest
  99. RECT   rcTrack;     // Bounding rectangle of available thumb position
  100. UINT   cmdSB;       // Scroll command
  101. UINT_PTR  hTimerSB; // Timer identifier
  102. int    dpxThumb;    // Delta of thumb button
  103. int    pxOld;       // Previous position in pixels
  104. int    posOld;      // Previous position
  105. int    posNew;      // new position
  106. HWND   hWndTrack;   // Parent tracking window
  107. BOOL   bTrackThumb; // TRUE if thumb is tracking
  108. SCROLLBARPOSINFO* pSBInfo;  // SCROLLBARPOSINFO pointer
  109. };
  110. struct SLIDERTICKS
  111. {
  112. SLIDERTICKS(double* pTicks, int nCount);
  113. ~SLIDERTICKS();
  114. double* pTicks;
  115. int nCount;
  116. };
  117. public:
  118. //-----------------------------------------------------------------------
  119. // Summary:
  120. //     Constructs a CXTPScrollBase object
  121. //-----------------------------------------------------------------------
  122. CXTPScrollBase();
  123. //-----------------------------------------------------------------------
  124. // Summary:
  125. //     Destroys a CXTPScrollBase object, handles cleanup and deallocation.
  126. //-----------------------------------------------------------------------
  127. virtual ~CXTPScrollBase();
  128. public:
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     Call this method to set style of scrollbar
  132. // Parameters:
  133. //     scrollStyle - Style to be set
  134. // See Also: GetScrollBarStyle
  135. //-----------------------------------------------------------------------
  136. void SetScrollBarStyle(XTPScrollBarStyle scrollStyle);
  137. //-----------------------------------------------------------------------
  138. // Summary:
  139. //     Call this method to get style of scrollbar
  140. // See Also: SetScrollBarStyle
  141. //-----------------------------------------------------------------------
  142. XTPScrollBarStyle GetScrollBarStyle() const;
  143. public:
  144. //-----------------------------------------------------------------------
  145. // Summary:
  146. //     Call this method to get SCROLLBARTRACKINFO information
  147. // See Also: GetScrollBarPosInfo
  148. //-----------------------------------------------------------------------
  149. SCROLLBARTRACKINFO* GetScrollBarTrackInfo() const;
  150. //-----------------------------------------------------------------------
  151. // Summary:
  152. //     Call this method to get SCROLLBARPOSINFO information
  153. // See Also: GetScrollBarTrackInfo
  154. //-----------------------------------------------------------------------
  155. SCROLLBARPOSINFO* GetScrollBarPosInfo();
  156. //-----------------------------------------------------------------------
  157. // Summary:
  158. //     Determines if scrollbar is enabled
  159. //-----------------------------------------------------------------------
  160. virtual BOOL IsScrollBarEnabled() const = 0;
  161. //-----------------------------------------------------------------------
  162. // Summary:
  163. //     Retrieves parent window of scrollbar
  164. // Returns:
  165. //     Pointer to parent window
  166. //-----------------------------------------------------------------------
  167. virtual CWnd* GetParentWindow() const = 0;
  168. //-----------------------------------------------------------------------
  169. // Summary:
  170. //     Call this method to check ScrollBar part under pointer.
  171. // Parameters:
  172. //     pt - Mouse pointer to test
  173. //-----------------------------------------------------------------------
  174. int HitTestScrollBar(POINT pt) const;
  175. CRect GetScrollBarPartRect(int nPart) const;
  176. //-----------------------------------------------------------------------
  177. // Summary:
  178. //     Call this method to start scrollbar tracking
  179. // Parameters:
  180. //     hWnd - Parent Window handle
  181. //     point - Starting cursor position
  182. //     pSBInfo - Scrollbar information
  183. //     bDirect - TRUE to scroll to specified position
  184. //-----------------------------------------------------------------------
  185. void PerformTrackInit(HWND hWnd, CPoint point, SCROLLBARPOSINFO* pSBInfo, BOOL bDirect);
  186. SLIDERTICKS* GetTicks() const;
  187. protected:
  188. //{{AFX_CODEJOCK_PRIVATE
  189. void EndScroll(BOOL fCancel);
  190. void MoveThumb(int px);
  191. void TrackThumb(UINT message, CPoint pt);
  192. void TrackBox(UINT message, CPoint point);
  193. void ContScroll();
  194. virtual void DoAnimate();
  195. //}}AFX_CODEJOCK_PRIVATE
  196. protected:
  197. //{{AFX_CODEJOCK_PRIVATE
  198. void SetupScrollInfo();
  199. virtual CRect GetScrollBarRect() = 0;
  200. virtual void GetScrollInfo(SCROLLINFO* psi) = 0;
  201. virtual void DoScroll(int cmd, int pos) = 0;
  202. virtual void RedrawScrollBar() = 0;
  203. virtual void CalcScrollBarInfo(LPRECT lprc, SCROLLBARPOSINFO* pSBInfo, SCROLLINFO* pSI);
  204. virtual CXTPScrollBarPaintManager* GetScrollBarPaintManager() const = 0;
  205. void CalcTrackDragRect(SCROLLBARTRACKINFO* pSBTrack) const;
  206. //}}AFX_CODEJOCK_PRIVATE
  207. protected:
  208. SCROLLBARPOSINFO m_spi;                 // ScrollBar position.
  209. SCROLLBARTRACKINFO* m_pSBTrack;         // ScrollBar tracking
  210. XTPScrollBarStyle m_scrollBarStyle;     // ScrollBar style
  211. BOOL m_bAnimation;
  212. int m_nTimerElapse;
  213. SLIDERTICKS* m_pTicks;
  214. };
  215. //===========================================================================
  216. // Summary:
  217. //     CXTPScrollBar is a CScrollBar derived class.
  218. //===========================================================================
  219. class _XTP_EXT_CLASS CXTPScrollBar : public CScrollBar, public CXTPScrollBase
  220. {
  221. public:
  222. //-----------------------------------------------------------------------
  223. // Summary:
  224. //     Constructs a CXTPScrollBar object
  225. //-----------------------------------------------------------------------
  226. CXTPScrollBar();
  227. //-----------------------------------------------------------------------
  228. // Summary:
  229. //     Destroys a CXTPScrollBar object, handles cleanup and deallocation
  230. //-----------------------------------------------------------------------
  231. virtual ~CXTPScrollBar();
  232. public:
  233. //-----------------------------------------------------------------------
  234. // Summary:
  235. //     Call this member to set the command bar's object.
  236. // Parameters:
  237. //     pCommandBars - CXTPCommandBars to be set.
  238. //-----------------------------------------------------------------------
  239. void SetCommandBars(CXTPCommandBars* pCommandBars);
  240. protected:
  241. //{{AFX_CODEJOCK_PRIVATE
  242. virtual CRect GetScrollBarRect();
  243. virtual void GetScrollInfo(SCROLLINFO* psi);
  244. virtual BOOL IsScrollBarEnabled() const;
  245. virtual CXTPScrollBarPaintManager* GetScrollBarPaintManager() const;
  246. virtual CWnd* GetParentWindow() const;
  247. virtual void DoScroll(int cmd, int pos);
  248. virtual void RedrawScrollBar();
  249. //}}AFX_CODEJOCK_PRIVATE
  250. protected:
  251. //{{AFX_CODEJOCK_PRIVATE
  252. DECLARE_MESSAGE_MAP()
  253. //{{AFX_MSG(CXTPScrollBar)
  254. afx_msg void OnPaint();
  255. afx_msg void OnDraw(CDC* pDC);
  256. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM /*lParam*/);
  257. afx_msg void OnEnable(BOOL bEnable);
  258. afx_msg void OnMouseLeave();
  259. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  260. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  261. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  262. afx_msg LRESULT OnSetScrollInfo(WPARAM wParam, LPARAM lParam);
  263. afx_msg LRESULT OnGetScrollInfo(WPARAM wParam, LPARAM lParam);
  264. afx_msg void OnSetFocus(CWnd* pOldWnd);
  265. afx_msg void OnContextMenu(CWnd* pWnd, CPoint pos);
  266. //}}AFX_MSG
  267. //}}AFX_CODEJOCK_PRIVATE
  268. protected:
  269. CXTPCommandBars* m_pCommandBars;            // Parent CommandBars object
  270. };
  271. //===========================================================================
  272. // Summary:
  273. //     CXTPScrollBarPaintManager is standalone class used to draw CXTPScrollBar object
  274. //===========================================================================
  275. class _XTP_EXT_CLASS CXTPScrollBarPaintManager
  276. {
  277. public:
  278. //-----------------------------------------------------------------------
  279. // Summary:
  280. //     Constructs a CXTPScrollBarPaintManager object
  281. // Parameters:
  282. //     pPaintManager - PaintManager of commandbars
  283. //-----------------------------------------------------------------------
  284. CXTPScrollBarPaintManager(CXTPPaintManager* pPaintManager);
  285. //-----------------------------------------------------------------------
  286. // Summary:
  287. //     Destroys a CXTPScrollBarPaintManager object, handles cleanup and deallocation
  288. //-----------------------------------------------------------------------
  289. virtual ~CXTPScrollBarPaintManager();
  290. public:
  291. //-----------------------------------------------------------------------
  292. // Summary:
  293. //     This method is called to draw scrollbar of the gallery
  294. // Parameters:
  295. //     pDC - Pointer to device context
  296. //     pScrollBar - ScrollBar to draw
  297. //-----------------------------------------------------------------------
  298. virtual void DrawScrollBar(CDC* pDC, CXTPScrollBase* pScrollBar);
  299. //-------------------------------------------------------------------------
  300. // Summary:
  301. //     Recalculates gallery metrics
  302. //-------------------------------------------------------------------------
  303. virtual void RefreshMetrics();
  304. //-----------------------------------------------------------------------
  305. // Summary:
  306. //     Returns parent paintmanager object
  307. //-----------------------------------------------------------------------
  308. CXTPPaintManager* GetPaintManager() const;
  309. private:
  310. void DrawArrowGlyph(CDC* pDC, CRect rcArrow, BOOL bHorz, BOOL bUpArrow, BOOL bEnabled);
  311. public:
  312. int m_cxHScroll;            // Width, in pixels, of the arrow bitmap on a horizontal scroll bar
  313. int m_cyHScroll;            // Height, in pixels, of a horizontal scroll bar.
  314. int m_cyVScroll;            // Height, in pixels, of the arrow bitmap on a vertical scroll bar.
  315. int m_cxVScroll;            // Width, in pixels, of a vertical scroll bar;
  316. int m_cThumb;
  317. protected:
  318. CXTPWinThemeWrapper m_themeScrollBar;
  319. CXTPPaintManager* m_pPaintManager;
  320. };
  321. class _XTP_EXT_CLASS CXTPSliderPaintManager : public CXTPScrollBarPaintManager
  322. {
  323. public:
  324. //-----------------------------------------------------------------------
  325. // Summary:
  326. //     Constructs a CXTPSliderPaintManager object
  327. // Parameters:
  328. //     pPaintManager - PaintManager of commandbars
  329. //-----------------------------------------------------------------------
  330. CXTPSliderPaintManager(CXTPPaintManager* pPaintManager);
  331. public:
  332. //-----------------------------------------------------------------------
  333. // Summary:
  334. //     This method is called to draw scrollbar of the gallery
  335. // Parameters:
  336. //     pDC - Pointer to device context
  337. //     pScrollBar - ScrollBar to draw
  338. //-----------------------------------------------------------------------
  339. virtual void DrawScrollBar(CDC* pDC, CXTPScrollBase* pScrollBar);
  340. //-------------------------------------------------------------------------
  341. // Summary:
  342. //     Recalculates gallery metrics
  343. //-------------------------------------------------------------------------
  344. virtual void RefreshMetrics();
  345. };
  346. AFX_INLINE CXTPScrollBase::SCROLLBARTRACKINFO* CXTPScrollBase::GetScrollBarTrackInfo() const {
  347. return m_pSBTrack;
  348. }
  349. AFX_INLINE CXTPScrollBase::SLIDERTICKS* CXTPScrollBase::GetTicks() const {
  350. return m_pTicks;
  351. }
  352. AFX_INLINE CXTPScrollBase::SCROLLBARPOSINFO* CXTPScrollBase::GetScrollBarPosInfo() {
  353. return &m_spi;
  354. }
  355. AFX_INLINE void CXTPScrollBase::SetScrollBarStyle(XTPScrollBarStyle scrollStyle) {
  356. m_scrollBarStyle = scrollStyle;
  357. }
  358. AFX_INLINE void CXTPScrollBar::SetCommandBars(CXTPCommandBars* pCommandBars) {
  359. m_pCommandBars = pCommandBars;
  360. }
  361. AFX_INLINE CXTPPaintManager* CXTPScrollBarPaintManager::GetPaintManager() const {
  362. return m_pPaintManager;
  363. }
  364. #endif //#if !defined(__XTPSTATUSBAR_H__)