Пример #1
0
        // В момент отпускания кнопки мыши, когда указатель - над компонентом (сохранение звезды в картинку)
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            if (MainForm.CurFigure == Figures.Star || MainForm.CurFigure == Figures.FilledStar)
            {
                // Получаем поверхность рисования из картинки
                Graphics g = Graphics.FromImage(bmp);
                // Создаём перо и настраиваем так, чтоб линия не распадалась на пиксели
                var pen = new Pen(MainForm.CurColor, MainForm.CurWidth);
                pen.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;
                pen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
                pen.EndCap   = System.Drawing.Drawing2D.LineCap.Round;

                float R        = Math.Max(e.X - oldX, e.Y - oldY) / 2f;
                float r        = R / 2;
                int   n        = MainForm.StarTips;
                bool  isFilled = MainForm.CurFigure == Figures.FilledStar ? true : false;
                if (R < 0 || r < 0 || n <= 0)
                {
                    return;
                }
                FiguresPainter.DrawStar(g, pen, oldX, oldY, R, r, n, isFilled: isFilled);

                // После рисования инвалидируем рисунок для отображения изменений
                pictureBox1.Invalidate();
            }
        }
Пример #2
0
        // Возникает при наведении указателя мыши на компонент (пишем координаты мыши в статус, рисуем)
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            // Пишем координаты мыши в статус
            var p = MdiParent as MainForm;

            p.toolStripStatusLabel1.Text = $"X:{e.X} Y:{e.Y}";

            if (e.Button == MouseButtons.Left)
            {
                if (MainForm.CurFigure == Figures.None)
                {
                    // Получаем поверхность рисования из картинки
                    Graphics g = Graphics.FromImage(bmp);
                    // Создаём перо и настраиваем так, чтоб линия не распадалась на пиксели
                    var pen = new Pen(MainForm.CurColor, MainForm.CurWidth);
                    pen.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;
                    pen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
                    pen.EndCap   = System.Drawing.Drawing2D.LineCap.Round;

                    g.DrawLine(pen,
                               oldX, oldY, e.X, e.Y);
                    oldX = e.X;
                    oldY = e.Y;

                    // После рисования инвалидируем рисунок для отображения изменений
                    pictureBox1.Invalidate();
                }
                else
                {
                    pictureBox1.Refresh(); // затираем предыдущие несохранённые звёзды, если есть, принудительно перерисовывая всё
                    // Получаем поверхность рисования из картинки
                    Graphics g = pictureBox1.CreateGraphics();

                    // Создаём перо и настраиваем так, чтоб линия не распадалась на пиксели
                    var pen = new Pen(MainForm.CurColor, MainForm.CurWidth);
                    pen.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;
                    pen.StartCap = System.Drawing.Drawing2D.LineCap.Round;
                    pen.EndCap   = System.Drawing.Drawing2D.LineCap.Round;

                    float R        = Math.Max(e.X - oldX, e.Y - oldY) / 2f;
                    float r        = R / 2;
                    int   n        = MainForm.StarTips;
                    bool  isFilled = MainForm.CurFigure == Figures.FilledStar ? true : false;
                    if (R < 0 || r < 0 || n <= 0)
                    {
                        return;
                    }
                    FiguresPainter.DrawStar(g, pen, oldX, oldY, R, r, n, isFilled: isFilled);
                }
            }
        }