public HCFloatLineItem(HCCustomData AOwnerData) : base(AOwnerData) { this.StyleNo = HCFloatStyle.Line; FMouseDownObj = HCLineObj.cloNone; Width = 100; Height = 70; FStartPt = new POINT(0, 0); FEndPt = new POINT(Width, Height); }
public override void MouseMove(MouseEventArgs e) { if (Active) { if (this.Resizing) { if (FMouseDownObj == HCLineObj.cloLeftOrTop) { FStartPt.Offset(e.X - this.FResizeX, e.Y - this.FResizeY); } else { FEndPt.Offset(e.X - this.FResizeX, e.Y - this.FResizeY); } this.FResizeX = e.X; this.FResizeY = e.Y; HC.GCursor = Cursors.Cross; } else { HCLineObj vLineObj = GetLineObjAt(e.X, e.Y); if ((vLineObj == HCLineObj.cloLeftOrTop) || (vLineObj == HCLineObj.cloRightOrBottom)) { HC.GCursor = Cursors.Cross; } else if (vLineObj != HCLineObj.cloNone) { HC.GCursor = Cursors.SizeAll; } } } else { HC.GCursor = Cursors.Default; } }
public override void MouseDown(MouseEventArgs e) { if (Active) { FMouseDownObj = GetLineObjAt(e.X, e.Y); this.Resizing = (e.Button == MouseButtons.Left) && ((FMouseDownObj == HCLineObj.cloLeftOrTop) || (FMouseDownObj == HCLineObj.cloRightOrBottom)); if (this.Resizing) { this.FResizeX = e.X; this.FResizeY = e.Y; // 缩放前的Rect的LeftTop if (FStartPt.X < FEndPt.X) { FLeftTop.X = FStartPt.X; } else { FLeftTop.X = FEndPt.X; } if (FStartPt.Y < FEndPt.Y) { FLeftTop.Y = FStartPt.Y; } else { FLeftTop.Y = FEndPt.Y; } } } else { FMouseDownObj = HCLineObj.cloNone; Active = PtInClient(e.X, e.Y); } }
private HCLineObj GetLineObjAt(int X, int Y) { HCLineObj Result = HCLineObj.cloNone; if (HC.PtInRect(new RECT(FStartPt.X - PointSize, FStartPt.Y - PointSize, FStartPt.X + PointSize, FStartPt.Y + PointSize), new POINT(X, Y))) { Result = HCLineObj.cloLeftOrTop; } else if (HC.PtInRect(new RECT(FEndPt.X - PointSize, FEndPt.Y - PointSize, FEndPt.X + PointSize, FEndPt.Y + PointSize), new POINT(X, Y))) { Result = HCLineObj.cloRightOrBottom; } else { POINT[] vPointArr = new POINT[4]; vPointArr[0] = new POINT(FStartPt.X - PointSize, FStartPt.Y); vPointArr[1] = new POINT(FStartPt.X + PointSize, FStartPt.Y); vPointArr[2] = new POINT(FEndPt.X + PointSize, FEndPt.Y); vPointArr[3] = new POINT(FEndPt.X - PointSize, FEndPt.Y); IntPtr vRgn = (IntPtr)GDI.CreatePolygonRgn(ref vPointArr[0], 4, GDI.WINDING); try { if (GDI.PtInRegion(vRgn, X, Y) > 0) { Result = HCLineObj.cloLine; } } finally { GDI.DeleteObject(vRgn); } } return(Result); }