Esempio n. 1
0
        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);
        }