123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- namespace LYFZ.ComponentLibrary
- {
- /// <summary>
- /// 建立圆角路径的样式。
- /// </summary>
- public enum RoundStyle
- {
- /// <summary>
- /// 四个角都不是圆角。
- /// </summary>
- None = 0,
- /// <summary>
- /// 四个角都为圆角。
- /// </summary>
- All = 1,
- /// <summary>
- /// 左边两个角为圆角。
- /// </summary>
- Left = 2,
- /// <summary>
- /// 右边两个角为圆角。
- /// </summary>
- Right = 3,
- /// <summary>
- /// 上边两个角为圆角。
- /// </summary>
- Top = 4,
- /// <summary>
- /// 下边两个角为圆角。
- /// </summary>
- Bottom = 5,
- /// <summary>
- /// 左下角为圆角。
- /// </summary>
- BottomLeft = 6,
- /// <summary>
- /// 右下角为圆角。
- /// </summary>
- BottomRight = 7,
- }
- public static class GraphicsPathHelper
- {
- /// <summary>
- /// 建立带有圆角样式的路径。
- /// </summary>
- /// <param name="rect">用来建立路径的矩形。</param>
- /// <param name="_radius">圆角的大小。</param>
- /// <param name="style">圆角的样式。</param>
- /// <param name="correction">是否把矩形长宽减 1,以便画出边框。</param>
- /// <returns>建立的路径。</returns>
- public static GraphicsPath CreatePath(
- Rectangle rect, int radius, RoundStyle style, bool correction)
- {
- GraphicsPath path = new GraphicsPath();
- int radiusCorrection = correction ? 1 : 0;
- switch (style)
- {
- case RoundStyle.None:
- path.AddRectangle(rect);
- break;
- case RoundStyle.All:
- path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);
- path.AddArc(
- rect.Right - radius - radiusCorrection,
- rect.Y,
- radius,
- radius,
- 270,
- 90);
- path.AddArc(
- rect.Right - radius - radiusCorrection,
- rect.Bottom - radius - radiusCorrection,
- radius,
- radius, 0, 90);
- path.AddArc(
- rect.X,
- rect.Bottom - radius - radiusCorrection,
- radius,
- radius,
- 90,
- 90);
- break;
- case RoundStyle.Left:
- path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);
- path.AddLine(
- rect.Right - radiusCorrection, rect.Y,
- rect.Right - radiusCorrection, rect.Bottom - radiusCorrection);
- path.AddArc(
- rect.X,
- rect.Bottom - radius - radiusCorrection,
- radius,
- radius,
- 90,
- 90);
- break;
- case RoundStyle.Right:
- path.AddArc(
- rect.Right - radius - radiusCorrection,
- rect.Y,
- radius,
- radius,
- 270,
- 90);
- path.AddArc(
- rect.Right - radius - radiusCorrection,
- rect.Bottom - radius - radiusCorrection,
- radius,
- radius,
- 0,
- 90);
- path.AddLine(rect.X, rect.Bottom - radiusCorrection, rect.X, rect.Y);
- break;
- case RoundStyle.Top:
- path.AddArc(rect.X, rect.Y, radius, radius, 180, 90);
- path.AddArc(
- rect.Right - radius - radiusCorrection,
- rect.Y,
- radius,
- radius,
- 270,
- 90);
- path.AddLine(
- rect.Right - radiusCorrection, rect.Bottom - radiusCorrection,
- rect.X, rect.Bottom - radiusCorrection);
- break;
- case RoundStyle.Bottom:
- path.AddArc(
- rect.Right - radius - radiusCorrection,
- rect.Bottom - radius - radiusCorrection,
- radius,
- radius,
- 0,
- 90);
- path.AddArc(
- rect.X,
- rect.Bottom - radius - radiusCorrection,
- radius,
- radius,
- 90,
- 90);
- path.AddLine(rect.X, rect.Y, rect.Right - radiusCorrection, rect.Y);
- break;
- case RoundStyle.BottomLeft:
- path.AddArc(
- rect.X,
- rect.Bottom - radius - radiusCorrection,
- radius,
- radius,
- 90,
- 90);
- path.AddLine(rect.X, rect.Y, rect.Right - radiusCorrection, rect.Y);
- path.AddLine(
- rect.Right - radiusCorrection,
- rect.Y,
- rect.Right - radiusCorrection,
- rect.Bottom - radiusCorrection);
- break;
- case RoundStyle.BottomRight:
- path.AddArc(
- rect.Right - radius - radiusCorrection,
- rect.Bottom - radius - radiusCorrection,
- radius,
- radius,
- 0,
- 90);
- path.AddLine(rect.X, rect.Bottom - radiusCorrection, rect.X, rect.Y);
- path.AddLine(rect.X, rect.Y, rect.Right - radiusCorrection, rect.Y);
- break;
- }
- path.CloseFigure();
- return path;
- }
- }
- }
|