效果:
代码:
using System.Drawing;
using System.Windows.Forms;
namespace CirecleCCS
{
class CcsGo
{
/// <summary>
/// 圆的直径
/// </summary>
public int ResizePinSize = 6;
//半径
int HalfRPR
{
get { return ResizePinSize / 2; }
}
private static Pen SelectRectPen, ResizePinPen;
private float[] SelectRectDashPattern;
private static Rectangle SelectRect;
private static Rectangle ResizePin1, ResizePin2, ResizePin3, ResizePin4, ResizePin5, ResizePin6, ResizePin7, ResizePin8;
private static Rectangle rect;
private static int ActivationPinPosition;
//selectrect的x,y,x1,y1
private static int SelectX0, SelectY0, SelectX1, SelectY1;
//8个角+点空白处+点中间
private const int hitNothing = -1;
private const int hitTopLeft = 0;
private const int hitTopRight = 1;
private const int hitBottomRight = 2;
private const int hitBottomLeft = 3;
private const int hitTop = 4;
private const int hitRight = 5;
private const int hitBottom = 6;
private const int hitLeft = 7;
private const int hitMiddle = 8;
#region HideResizePin//隐藏ResizePin
private void HideResizePin()
{
ResizePin1.Width = 0; ResizePin1.Height = 0;
ResizePin2.Width = 0; ResizePin2.Height = 0;
ResizePin3.Width = 0; ResizePin3.Height = 0;
ResizePin4.Width = 0; ResizePin4.Height = 0;
ResizePin5.Width = 0; ResizePin5.Height = 0;
ResizePin6.Width = 0; ResizePin6.Height = 0;
ResizePin7.Width = 0; ResizePin7.Height = 0;
ResizePin8.Width = 0; ResizePin8.Height = 0;
}
#endregion
#region SetResizePinVal 实时显示ResizePin
void SetResizePinVal()
{
ResizePin1.X = X - HalfRPR;
ResizePin1.Y = Y - HalfRPR;
ResizePin2.X = X + Width / 2 - HalfRPR;
ResizePin2.Y = Y - HalfRPR;
ResizePin3.X = X + Width - HalfRPR;
ResizePin3.Y = Y - HalfRPR;
ResizePin4.X = X + Width - HalfRPR;
ResizePin4.Y = Y + Height / 2 - HalfRPR;
ResizePin5.X = X + Width - HalfRPR;
ResizePin5.Y = Y + Height - HalfRPR;
ResizePin6.X = X + Width / 2 - HalfRPR;
ResizePin6.Y = Y + Height - HalfRPR;
ResizePin7.X = X - HalfRPR;
ResizePin7.Y = Y + Height - HalfRPR;
ResizePin8.X = X - HalfRPR;
ResizePin8.Y = Y + Height / 2 - HalfRPR;
}
#endregion
#region ShowResizePin//显示ResizePin
private void ShowResizePin()
{
ResizePin1.X = SelectRect.X - HalfRPR;
ResizePin1.Y = SelectRect.Y - HalfRPR;
ResizePin2.X = SelectRect.X + SelectRect.Width / 2 - HalfRPR;
ResizePin2.Y = SelectRect.Y - HalfRPR;
ResizePin3.X = SelectRect.X + SelectRect.Width - HalfRPR;
ResizePin3.Y = SelectRect.Y - HalfRPR;
ResizePin4.X = SelectRect.X + SelectRect.Width - HalfRPR;
ResizePin4.Y = SelectRect.Y + SelectRect.Height / 2 - HalfRPR;
ResizePin5.X = SelectRect.X + SelectRect.Width - HalfRPR;
ResizePin5.Y = SelectRect.Y + SelectRect.Height - HalfRPR;
ResizePin6.X = SelectRect.X + SelectRect.Width / 2 - HalfRPR;
ResizePin6.Y = SelectRect.Y + SelectRect.Height - HalfRPR;
ResizePin7.X = SelectRect.X - HalfRPR;
ResizePin7.Y = SelectRect.Y + SelectRect.Height - HalfRPR;
ResizePin8.X = SelectRect.X - HalfRPR;
ResizePin8.Y = SelectRect.Y + SelectRect.Height / 2 - HalfRPR;
ResizePin1.Width = ResizePinSize; ResizePin1.Height = ResizePinSize;
ResizePin2.Width = ResizePinSize; ResizePin2.Height = ResizePinSize;
ResizePin3.Width = Resiz