// XTPMarkupScrollViewer.h: interface for the CXTPMarkupScrollViewer class. // // This file is a part of the XTREME TOOLKIT PRO MFC class library. // (c)1998-2012 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// //{{AFX_CODEJOCK_PRIVATE #if !defined(__XTPMARKUPSCROLLVIEWER_H__) #define __XTPMARKUPSCROLLVIEWER_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CXTPMarkupBrush; class CXTPMarkupBuilder; class CXTPMarkupScrollBarGripper; enum XTPMarkupScrollBarVisibility { xtpMarkupScrollBarDisabled, xtpMarkupScrollBarAuto, xtpMarkupScrollBarVisible }; class _XTP_EXT_CLASS CXTPMarkupScrollBar : public CXTPMarkupControl { DECLARE_MARKUPCLASS(CXTPMarkupScrollBar); protected: //=========================================================================== // Summary: // The SCROLLBARPOSINFO structure contains scroll bar information. //=========================================================================== struct SCROLLBARPOSINFO { int posMin; // Minimum position int posMax; // Maximum position int page; // Page size int pos; // Position of thumb int pxTop; // Top bounding rectangle int pxBottom;// Bottom bounding rectangle int pxLeft; // Left bounding rectangle int pxRight; // Right bounding rectangle int cpxThumb;// Size of thumb button int pxUpArrow; // Position of Up arrow int pxDownArrow; // Position of Down arrow int pxStart; // Previous position of thumb button int pxThumbBottom; // Thumb bottom bounding rectangle int pxThumbTop; // Thumb top bounding rectangle int pxPopup; // In-place scroll position int cpx; // position in pixels int pxMin; // Minimum position in pixels RECT rc; // Bounding rectangle int ht; // Hit test BOOL fVert; // TRUE if vertical }; //=========================================================================== // Summary: // The SCROLLBARTRACKINFO structure contains tracking information. //=========================================================================== struct SCROLLBARTRACKINFO { BOOL fHitOld; // Previous hittest RECT rcTrack; // Bounding rectangle of available thumb position UINT cmdSB; // Scroll command UINT_PTR hTimerSB; // Timer identifier int dpxThumb; // Delta of thumb button int pxOld; // Previous position in pixels int posOld; // Previous position int posNew; // new position HWND hWndTrack; // Parent tracking window BOOL bTrackThumb; // TRUE if thumb is tracking SCROLLBARPOSINFO* pSBInfo; // SCROLLBARPOSINFO pointer }; protected: CXTPMarkupScrollBar(); public: void SetOrientation(XTPMarkupOrientation orientation); void SetScrollInfo(SCROLLINFO* pScrollInfo); void GetScrollInfo(SCROLLINFO* pScrollInfo); protected: CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize); CSize ArrangeOverride(CSize szFinalSize); void OnRender(CXTPMarkupDrawingContext* pDC); void CalcScrollBarInfo(LPRECT lprc, SCROLLBARPOSINFO* pSBInfo, SCROLLINFO* pSI); void OnMouseLeave(CXTPMarkupMouseEventArgs* e); void OnMouseEnter(CXTPMarkupMouseEventArgs* e); void OnMouseMove(CXTPMarkupMouseEventArgs* e); void OnMouseLeftButtonUp(CXTPMarkupMouseButtonEventArgs* e); void OnMouseLeftButtonDown(CXTPMarkupMouseButtonEventArgs* e); BOOL IsEnabled() const; private: void PerformTrackInit(HWND hWnd, CPoint point, SCROLLBARPOSINFO* pSBInfo, BOOL bDirect); void CalcTrackDragRect(SCROLLBARTRACKINFO* pSBTrack) const; void DoScroll(int cmd, int pos); int HitTestScrollBar(POINT pt) const; void EndScroll(BOOL fCancel); void RedrawScrollBar(); void MoveThumb(int px); void TrackThumb(UINT message, CPoint pt); void TrackBox(UINT message, CPoint point); void ContScroll(); int SBPosFromPx(CXTPMarkupScrollBar::SCROLLBARPOSINFO* pSBInfo, int px); void ScreenToClient(HWND hWnd, LPPOINT lpPoint); protected: XTPMarkupOrientation m_orientation; SCROLLBARPOSINFO m_spi; // ScrollBar position. SCROLLBARTRACKINFO* m_pSBTrack; // ScrollBar tracking SCROLLINFO m_si; }; class _XTP_EXT_CLASS CXTPMarkupScrollViewer : public CXTPMarkupContentControl { DECLARE_MARKUPCLASS(CXTPMarkupScrollViewer); protected: CXTPMarkupScrollViewer(); ~CXTPMarkupScrollViewer(); public: int GetVisualChildrenCount() const; CXTPMarkupVisual* GetVisualChild(int nIndex) const; void Scroll(int nBar, int cmd, int pos); void SetScrollPos(int nBar, int pos); int GetScrollPos(int nBar); int GetScrollLimit(int nBar); XTPMarkupScrollBarVisibility GetVerticalScrollBarVisibility() const; XTPMarkupScrollBarVisibility GetHorizontalScrollBarVisibility() const; protected: CSize ArrangeOverride(CSize szFinalSize); CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize); void OnMouseWheel(CXTPMarkupMouseWheelEventArgs* e); protected: void CreateScrollBar(int nBar); protected: CXTPMarkupScrollBar* m_pVerticalScrollBar; CXTPMarkupScrollBar* m_pHorizontalScrollBar; CXTPMarkupScrollBarGripper* m_pScrollBarGripper; int m_xOffset; int m_yOffset; public: static CXTPMarkupDependencyProperty* m_pVerticalScrollBarVisibilityProperty; static CXTPMarkupDependencyProperty* m_pHorizontalScrollBarVisibilityProperty; }; AFX_INLINE void CXTPMarkupScrollBar::SetOrientation(XTPMarkupOrientation orientation) { m_orientation = orientation; } AFX_INLINE XTPMarkupScrollBarVisibility CXTPMarkupScrollViewer::GetVerticalScrollBarVisibility() const { CXTPMarkupEnum* pValue = MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pVerticalScrollBarVisibilityProperty)); return pValue ? (XTPMarkupScrollBarVisibility)(int)(*pValue) : xtpMarkupScrollBarVisible; } AFX_INLINE XTPMarkupScrollBarVisibility CXTPMarkupScrollViewer::GetHorizontalScrollBarVisibility() const { CXTPMarkupEnum* pValue = MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pHorizontalScrollBarVisibilityProperty)); return pValue ? (XTPMarkupScrollBarVisibility)(int)(*pValue) : xtpMarkupScrollBarDisabled; } #endif // !defined(__XTPMARKUPSCROLLVIEWER_H__)