Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сделать так, что бы рисунок оставался на форме 
V
    Опции темы
grey_f1
Дата 6.10.2007, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.6.2007

Репутация: нет
Всего: нет



Как сделать, что бы при перерисовке формы рисунок (например линия) оставался на форме? И вообще возможно ли это?
PM MAIL   Вверх
stab
Дата 6.10.2007, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 7
Всего: 48



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


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
grey_f1
Дата 6.10.2007, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.6.2007

Репутация: нет
Всего: нет



Цитата

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



stab, можно пример?
PM MAIL   Вверх
stab
Дата 6.10.2007, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 7
Всего: 48



Код

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);
        }
    }
}


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


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
grey_f1
Дата 6.10.2007, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.6.2007

Репутация: нет
Всего: нет



stab, а С++ можно пример? Я С# не знаю  :-( 
PM MAIL   Вверх
stab
Дата 6.10.2007, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 7
Всего: 48



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


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
grey_f1
Дата 6.10.2007, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 21.6.2007

Репутация: нет
Всего: нет



stab, спасибо! Буду пробовать smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1146 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.