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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupScrollViewer.h: interface for the CXTPMarkupScrollViewer class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO 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. #if !defined(__XTPMARKUPSCROLLVIEWER_H__)
  21. #define __XTPMARKUPSCROLLVIEWER_H__
  22. #if _MSC_VER > 1000
  23. #pragma once
  24. #endif // _MSC_VER > 1000
  25. #include "XTPMarkupControl.h"
  26. class CXTPMarkupBrush;
  27. class CXTPMarkupBuilder;
  28. class CXTPMarkupScrollBarGripper;
  29. enum XTPMarkupScrollBarVisibility
  30. {
  31. xtpMarkupScrollBarDisabled,
  32. xtpMarkupScrollBarAuto,
  33. xtpMarkupScrollBarVisible
  34. };
  35. class _XTP_EXT_CLASS CXTPMarkupScrollBar : public CXTPMarkupControl
  36. {
  37. DECLARE_MARKUPCLASS(CXTPMarkupScrollBar);
  38. protected:
  39. //===========================================================================
  40. // Summary:
  41. //     The SCROLLBARPOSINFO structure contains scroll bar information.
  42. //===========================================================================
  43. struct SCROLLBARPOSINFO
  44. {
  45. int    posMin;  // Minimum position
  46. int    posMax;  // Maximum position
  47. int    page;    // Page size
  48. int    pos;     // Position of thumb
  49. int    pxTop;   // Top bounding rectangle
  50. int    pxBottom;// Bottom bounding rectangle
  51. int    pxLeft;  // Left bounding rectangle
  52. int    pxRight; // Right bounding rectangle
  53. int    cpxThumb;// Size of thumb button
  54. int    pxUpArrow;   // Position of Up arrow
  55. int    pxDownArrow; // Position of Down arrow
  56. int    pxStart;     // Previous position of thumb button
  57. int    pxThumbBottom;   // Thumb bottom bounding rectangle
  58. int    pxThumbTop;      // Thumb top bounding rectangle
  59. int    pxPopup; // In-place scroll position
  60. int    cpx;     // position in pixels
  61. int    pxMin;   // Minimum position in pixels
  62. RECT   rc;      // Bounding rectangle
  63. int    ht;      // Hit test
  64. BOOL   fVert;   // TRUE if vertical
  65. };
  66. //===========================================================================
  67. // Summary:
  68. //     The SCROLLBARTRACKINFO structure contains tracking information.
  69. //===========================================================================
  70. struct SCROLLBARTRACKINFO
  71. {
  72. BOOL   fHitOld;     // Previous hittest
  73. RECT   rcTrack;     // Bounding rectangle of available thumb position
  74. UINT   cmdSB;       // Scroll command
  75. UINT_PTR  hTimerSB; // Timer identifier
  76. int    dpxThumb;    // Delta of thumb button
  77. int    pxOld;       // Previous position in pixels
  78. int    posOld;      // Previous position
  79. int    posNew;      // new position
  80. HWND   hWndTrack;   // Parent tracking window
  81. BOOL   bTrackThumb; // TRUE if thumb is tracking
  82. SCROLLBARPOSINFO* pSBInfo;  // SCROLLBARPOSINFO pointer
  83. };
  84. protected:
  85. CXTPMarkupScrollBar();
  86. public:
  87. void SetOrientation(XTPMarkupOrientation orientation);
  88. void SetScrollInfo(SCROLLINFO* pScrollInfo);
  89. void GetScrollInfo(SCROLLINFO* pScrollInfo);
  90. protected:
  91. CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
  92. CSize ArrangeOverride(CSize szFinalSize);
  93. void OnRender(CXTPMarkupDrawingContext* pDC);
  94. void CalcScrollBarInfo(LPRECT lprc, SCROLLBARPOSINFO* pSBInfo, SCROLLINFO* pSI);
  95. void OnMouseLeave(CXTPMarkupMouseEventArgs* e);
  96. void OnMouseEnter(CXTPMarkupMouseEventArgs* e);
  97. void OnMouseMove(CXTPMarkupMouseEventArgs* e);
  98. void OnMouseLeftButtonUp(CXTPMarkupMouseButtonEventArgs* e);
  99. void OnMouseLeftButtonDown(CXTPMarkupMouseButtonEventArgs* e);
  100. BOOL IsEnabled() const;
  101. private:
  102. void PerformTrackInit(HWND hWnd, CPoint point, SCROLLBARPOSINFO* pSBInfo, BOOL bDirect);
  103. void CalcTrackDragRect(SCROLLBARTRACKINFO* pSBTrack) const;
  104. void DoScroll(int cmd, int pos);
  105. int HitTestScrollBar(POINT pt) const;
  106. void EndScroll(BOOL fCancel);
  107. void RedrawScrollBar();
  108. void MoveThumb(int px);
  109. void TrackThumb(UINT message, CPoint pt);
  110. void TrackBox(UINT message, CPoint point);
  111. void ContScroll();
  112. int SBPosFromPx(CXTPMarkupScrollBar::SCROLLBARPOSINFO*  pSBInfo, int px);
  113. void ScreenToClient(HWND hWnd,  LPPOINT lpPoint);
  114. protected:
  115. XTPMarkupOrientation m_orientation;
  116. SCROLLBARPOSINFO m_spi;                 // ScrollBar position.
  117. SCROLLBARTRACKINFO* m_pSBTrack;         // ScrollBar tracking
  118. SCROLLINFO m_si;
  119. };
  120. class _XTP_EXT_CLASS CXTPMarkupScrollViewer : public CXTPMarkupContentControl
  121. {
  122. DECLARE_MARKUPCLASS(CXTPMarkupScrollViewer);
  123. protected:
  124. CXTPMarkupScrollViewer();
  125. ~CXTPMarkupScrollViewer();
  126. public:
  127. int GetVisualChildrenCount() const;
  128. CXTPMarkupVisual* GetVisualChild(int nIndex) const;
  129. void Scroll(int nBar, int cmd, int pos);
  130. void SetScrollPos(int nBar, int pos);
  131. int GetScrollPos(int nBar);
  132. int GetScrollLimit(int nBar);
  133. XTPMarkupScrollBarVisibility GetVerticalScrollBarVisibility() const;
  134. XTPMarkupScrollBarVisibility GetHorizontalScrollBarVisibility() const;
  135. protected:
  136. CSize ArrangeOverride(CSize szFinalSize);
  137. CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
  138. void OnMouseWheel(CXTPMarkupMouseWheelEventArgs* e);
  139. protected:
  140. void CreateScrollBar(int nBar);
  141. protected:
  142. CXTPMarkupScrollBar* m_pVerticalScrollBar;
  143. CXTPMarkupScrollBar* m_pHorizontalScrollBar;
  144. CXTPMarkupScrollBarGripper* m_pScrollBarGripper;
  145. int m_xOffset;
  146. int m_yOffset;
  147. public:
  148. static CXTPMarkupDependencyProperty* m_pVerticalScrollBarVisibilityProperty;
  149. static CXTPMarkupDependencyProperty* m_pHorizontalScrollBarVisibilityProperty;
  150. };
  151. AFX_INLINE void CXTPMarkupScrollBar::SetOrientation(XTPMarkupOrientation orientation) {
  152. m_orientation = orientation;
  153. }
  154. AFX_INLINE XTPMarkupScrollBarVisibility CXTPMarkupScrollViewer::GetVerticalScrollBarVisibility() const {
  155. CXTPMarkupEnum* pValue = MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pVerticalScrollBarVisibilityProperty));
  156. return pValue ? (XTPMarkupScrollBarVisibility)(int)(*pValue) : xtpMarkupScrollBarVisible;
  157. }
  158. AFX_INLINE XTPMarkupScrollBarVisibility CXTPMarkupScrollViewer::GetHorizontalScrollBarVisibility() const {
  159. CXTPMarkupEnum* pValue = MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pHorizontalScrollBarVisibilityProperty));
  160. return pValue ? (XTPMarkupScrollBarVisibility)(int)(*pValue) : xtpMarkupScrollBarDisabled;
  161. }
  162. #endif // !defined(__XTPMARKUPSCROLLVIEWER_H__)