Нарисовать квадрат, а в середине фигуру, которую можно перетаскивать - C#
Формулировка задачи:
нужно нарисовать квадрат а в середине её фигуру которую можна в дальнейшем перетаскивать, может какойто примерчик подскажите
Решение задачи: «Нарисовать квадрат, а в середине фигуру, которую можно перетаскивать»
textual
Листинг программы
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.ClientSize = new Size(640, 480);
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
Application.Idle += Idle;
}
private void Idle(object sender, EventArgs e)
{
int tc1 = Environment.TickCount;
this.Invalidate();
this.Update();
FPS();
Text = "FPS: " + fps.ToString();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
Draw(e.Graphics);
}
protected new void Update()
{
if (center.X - r < rect.Left) center.X = rect.Left + r;
if (center.X + r > rect.Right) center.X = rect.Right - r;
if (center.Y - r < rect.Top) center.Y = rect.Top + r;
if (center.Y + r > rect.Bottom) center.Y = rect.Bottom - r;
base.Update();
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (PtInCircle(e.Location)) move = true;
base.OnMouseDown(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (move) move = false;
base.OnMouseUp(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (move) center = e.Location;
base.OnMouseMove(e);
}
bool PtInCircle(Point p)
{
return (center.X - p.X) * (center.X - p.X) + (center.Y - p.Y) * (center.Y - p.Y) <= r * r;
}
Rectangle rect = new Rectangle(50, 50, 500, 340);
bool move = false;
PointF center = new PointF(100, 100);
float r = 10f;
private void Draw(Graphics gr)
{
gr.Clear(Color.Black);
gr.DrawRectangle(Pens.Green, rect);
gr.FillEllipse(Brushes.Red, center.X - r, center.Y - r, 2f * r, 2f * r);
}
int fps = 0, cf = 0;
int ptc = Environment.TickCount;
void FPS()
{
int tc = Environment.TickCount;
if (tc - ptc >= 1000)
{
fps = cf;
ptc = tc;
cf = 0;
}
else cf++;
}
}