0

我正在尝试制作一个看起来像这样的自定义图片框 -

在此处输入图像描述

到目前为止,我所做的只是- 在此处输入图像描述

使用此代码 -

    protected void UpdateRegion()
    {
        var path = new GraphicsPath();
        Point[] points =
        {
            new Point( 0, 0),
            new Point(0, ClientSize.Height-80),
            new Point(80 , ClientSize.Height),
            new Point(ClientSize.Width-80, ClientSize.Height),
            new Point(ClientSize.Width,  ClientSize.Height-80),
            new Point(ClientSize.Width , 0)
        };
        path.AddPolygon(points);
        path.FillMode = FillMode.Winding;
        this.Region = new Region(path);
    }
4

1 回答 1

3

干得好:

在此处输入图像描述

        GraphicsPath path = new GraphicsPath();
        path.FillMode = FillMode.Winding;

        int cut = 80;
        Rectangle cr = panel1.ClientRectangle;

        Point[] points =
        {
            new Point(0, cr.Height - cut),
            new Point(0, 0),
            new Point(cr.Width, 0),
            new Point(cr.Width, cr.Height - cut),
            new Point(cr.Width - cut, cr.Height),
            new Point(cut, cr.Height),
            new Point(0, cr.Height - cut),
        };
        path.AddPolygon(points);

        Rectangle arcRect = new Rectangle(0, cr.Height - 2 * cut, 2 * cut, 2 * cut);
        path.AddArc(arcRect, 90f, 90f);

弧由边界矩形定义,在我们的例子中,它的大小是切口的两倍。它从 x 轴顺时针方向 90° 开始,然后(至少)多走 90°。

您可以将其添加到 GraphicsPath或使用 Graphics对象绘制它。

这是来自 MSDN 的引用:

如果图中有先前的直线或曲线,则添加一条线以将前一段的端点连接到圆弧的起点。

圆弧沿着以指定矩形为界的椭圆的周长绘制。圆弧的起点是通过从椭圆的 x 轴(在 0 度角处)顺时针测量起点角的度数来确定的。通过从起点顺时针测量扫描角的度数来类似地定位端点。如果扫掠角大于 360 度或小于 -360 度,则圆弧分别扫掠 360 度或 -360 度。

注意到我添加了圆弧的边界矩形仅用于演示。代码不包括它。

对于其他角落的圆形切割,您需要更改和扩展点数组并添加更多/其他弧。

其他角弧采用这些矩形:

 Rectangle arcRectTL = new Rectangle(0, 0, 2 * cut, 2 * cut);
 Rectangle arcRectTR = new Rectangle(cr.Width - 2 * cut, 0, 2 * cut, 2 * cut);
 Rectangle arcRectBR = new Rectangle(cr.Width - 2*cut, cr.Height - 2*cut, 2*cut, 2*cut);

起始角度分别为:180°, 270° and 0°

尺寸和扫掠角度保持不变。

于 2015-11-07T13:22:39.090 回答