Нарисовать квадрат, а в середине фигуру, которую можно перетаскивать - C#

Формулировка задачи:

нужно нарисовать квадрат а в середине её фигуру которую можна в дальнейшем перетаскивать, может какойто примерчик подскажите

Код к задаче: «Нарисовать квадрат, а в середине фигуру, которую можно перетаскивать - 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++;
        }
    }

13   голосов, оценка 4.000 из 5


СОХРАНИТЬ ССЫЛКУ