Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Сделать так, что бы рисунок оставался на форме


Автор: grey_f1 6.10.2007, 02:56
Как сделать, что бы при перерисовке формы рисунок (например линия) оставался на форме? И вообще возможно ли это?

Автор: stab 6.10.2007, 04:59
В событии Paint перерисовывай просто. Или используй так называемый backbuffer, т.е., в случае .NET, объект класса Bitmap, на него всё рисуй, а в Paint рисуй уже с него на форму.

Автор: grey_f1 6.10.2007, 06:28
Цитата

в случае .NET, объект класса Bitmap, на него всё рисуй, а в Paint рисуй уже с него на форму.



stab, можно пример?

Автор: stab 6.10.2007, 06:47
Код

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace Vingrad.PaintSample
{
    public partial class Form1: Form
    {
        public Form1()
        {
            InitializeComponent();

            ResetBackbuffer();
        }

        private Bitmap backbuffer;

        private void ResetBackbuffer()
        {
            backbuffer = new Bitmap(this.ClientSize.Width, this.ClientSize.Height, PixelFormat.Format32bppArgb);

            Graphics g = Graphics.FromImage(backbuffer);

            g.Clear(SystemColors.Highlight);

            g.SmoothingMode = SmoothingMode.HighQuality;
            g.DrawLine(SystemPens.HighlightText, 0, 0, backbuffer.Width, backbuffer.Height);

            g.Dispose();
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            ResetBackbuffer();
            this.Invalidate();
        }

        protected override void OnPaintBackground(PaintEventArgs e)
        {
            e.Graphics.DrawImageUnscaled(backbuffer, 0, 0);
        }
    }
}


оставляю тебе огромный простор для оптимизаций ;)

Автор: grey_f1 6.10.2007, 07:35
stab, а С++ можно пример? Я С# не знаю  :-( 

Автор: stab 6.10.2007, 07:39
неа, C++/CLI не настолько хорошо знаю, чтобы без студии писать, а сейчас под рукой только C# Express. в любом случае, проблем с переносом особых не должно быть, проставь: ^, gcnew, ->, плюс немного подшаманить саму структуру класса. тебе только на пользу такое упражнение пойдёт ;)

Автор: grey_f1 6.10.2007, 07:53
stab, спасибо! Буду пробовать smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)