protected override HCShapeLineObj GetObjAt(int x, int y) { HCShapeLineObj vResult = HCShapeLineObj.sloNone; if (HC.PtInRect(new RECT(StartPt.X - PointSize, StartPt.Y - PointSize, StartPt.X + PointSize, StartPt.Y + PointSize), new POINT(x, y))) { vResult = HCShapeLineObj.sloStart; } else if (HC.PtInRect(new RECT(EndPt.X - PointSize, EndPt.Y - PointSize, EndPt.X + PointSize, EndPt.Y + PointSize), new POINT(x, y))) { vResult = HCShapeLineObj.sloEnd; } else { RECT vRect = ClientRect(); vRect.Inflate(PointSize, PointSize); IntPtr vRgn1 = GDI.CreateEllipticRgnIndirect(ref vRect); try { if (GDI.PtInRegion(vRgn1, x, y)) // 在外围 { vRect.Inflate(-PointSize - PointSize, -PointSize - PointSize); IntPtr vRgn2 = GDI.CreateEllipticRgnIndirect(ref vRect); try { if (!GDI.PtInRegion(vRgn2, x, y)) // 不在内围 { vResult = HCShapeLineObj.sloLine; } } finally { GDI.DeleteObject(vRgn2); } } } finally { GDI.DeleteObject(vRgn1); } } return(vResult); }