------ #### MyDb V2.1.2102.1101 - *.[新增]新增Auto类,增加 鼠标模拟操作和按键模拟操作。 - *.[新增]新增WinAPI命名空间,将windows自带的API集中在这个命名空间。
127 lines
5.2 KiB
C#
127 lines
5.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Text;
|
|
|
|
namespace ryControls
|
|
{
|
|
/// <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
|
|
}
|
|
/// <summary>
|
|
/// 画图相关API
|
|
/// </summary>
|
|
public class Drawing
|
|
{
|
|
/// <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;
|
|
}
|
|
}
|
|
}
|