Нарисовать квадрат, а в середине фигуру, которую можно перетаскивать - 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++; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д