#ifndef __VIEWPORTRESIZE_H #define __VIEWPORTRESIZE_H #define HV_ONSIDE 0x01 //在边上或在顶点上 #define HV_ONEXTEND 0x02 //在延长线上 #define VP_RESIZE_EX 1 //包括延长线命中的目标进行拖曳 #define VP_RESIZE 2 //只有边界命中的目标进行拖曳 #define VP_COPY 3 //只有边界命中的目标进行复制 #define VP_MOVE 4 //只有边界命中的目标进行移动 class TUTIL_IMPEXP THitViewport { //命中视窗的信息 public: TViewportInfo m_id; Adesk::UInt8 m_nHitFlag; //顶点或边的序号: 1--底边,2--右边,3--上边,4--左边 // 1--左下,2--右下,3--右上,4--左上 Adesk::UInt8 m_nHitPosition; public: THitViewport():m_nHitFlag(0), m_nHitPosition(0) { } CRect GetRectOnHitPos(int nMethod, CPoint ptHitFirst, CPoint ptNew) const; }; class TUTIL_IMPEXP TViewportResize { public: static int m_nApplyMethod; static CPoint m_ptOld; static CPoint m_ptFirstHit; static BOOL m_bApplied; //是否已经执行了生效 //static BOOL m_bApplyExtend; //是否对延长线命中的目标也生效 static BOOL m_bTracking; static DList m_lstHitObjects; //所有命中的目标 public: TViewportResize(); static int GetApplyMethod(int nFlags); static void StartTracking(); static void StopTracking(BOOL bAccept, BOOL bApplyExtend); static BOOL ApplyChange(); static BOOL OnCaptureChanged(CWnd *pWnd) ; static BOOL OnMouseMove(UINT nFlags, CPoint point); static BOOL OnLButtonDown(UINT nFlags, CPoint point); static BOOL OnLButtonUp(UINT nFlags, CPoint point); static BOOL OnEscape(); static const TCHAR *HitTest(int nMethod, CPoint point, DList &m_lstHitObjcts); }; //读取视口信息 TUTIL_IMPEXP void ReadVports(DList &vpInfo); #endif