#pragma once namespace NItem { class CRectTrackerEx { public: // Constructors CRectTrackerEx() { Construct(); }; CRectTrackerEx(LPCRECT lpSrcRect, UINT nStyle); // Style Flags enum StyleFlags { solidLine = 1, dottedLine = 2, hatchedBorder = 4, resizeInside = 8, resizeOutside = 16, hatchInside = 32, }; // Hit-Test codes enum TrackerHit { hitNothing = -1, hitTopLeft = 0, hitTopRight = 1, hitBottomRight = 2, hitBottomLeft = 3, hitTop = 4, hitRight = 5, hitBottom = 6, hitLeft = 7, hitMiddle = 8 }; // Attributes UINT m_nStyle; // current state CRect m_rect; // current position (always in pixels) CSize m_sizeMin; // minimum X and Y size during track operation int m_nHandleSize; // size of resize handles (default from WIN.INI) // Operations void Draw(CDC* pDC) const; void GetTrueRect(LPRECT lpTrueRect) const; BOOL SetCursor(CWnd* pWnd, UINT nHitTest) const; BOOL Track(int nHandle, CPoint point, BOOL bAllowInvert, CDC * pDCScreen); BOOL TrackRubberBand(CWnd* pWnd, CPoint point, BOOL bAllowInvert = TRUE); int HitTest(CPoint point) const; int NormalizeHit(int nHandle) const; // Overridables virtual void DrawTrackerRect(LPCRECT lpRect, CDC* pDC); virtual void AdjustRect(int nHandle, LPRECT lpRect); virtual void OnChangedRect(const CRect& rectOld); virtual UINT GetHandleMask() const; void SetTrackStart(CPoint& point); // Implementation public: virtual ~CRectTrackerEx(); protected: BOOL m_bAllowInvert = FALSE; // flag passed to Track or TrackRubberBand CRect m_rectLast; CSize m_sizeLast; CPoint m_ptLast; BOOL m_bErase = FALSE; // TRUE if DrawTrackerRect is called for erasing BOOL m_bFinalErase = FALSE; // TRUE if DragTrackerRect called for final erase // implementation helpers int HitTestHandles(CPoint point) const; void GetHandleRect(int nHandle, CRect* pHandleRect) const; void GetModifyPointers(int nHandle, int**ppx, int**ppy, int* px, int*py); void GetModifyPointers(int nHandle, CPoint point); virtual int GetHandleSize(LPCRECT lpRect = NULL) const; BOOL TrackHandle(int nHandle, CPoint point, CDC* pDCScreen, CDC* pDCBackground); BOOL TrackHandle(int nHandle, CPoint point, CDC* pDCScreen); void Construct(); }; }; using namespace NItem;