Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите с OnPaint / 8 сообщений из 8, страница 1 из 1
02.09.2004, 08:25
    #32676579
oablohin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с OnPaint
Мне пришлось создать нестандартный компонент, который в т.ч. нужно самому отрисовывать. Так вот, все бы хорошо, но этот OnPaint нужно в неторых случаях выполнять по движению мыши над компонентом, и происходит неприятное моргание, чем слабее машина, тем сильнее заметно,
Подскажите, плз, как лечить.
...
Рейтинг: 0 / 0
02.09.2004, 11:49
    #32677045
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с OnPaint
oablohinМне пришлось создать нестандартный компонент, который в т.ч. нужно самому отрисовывать. Так вот, все бы хорошо, но этот OnPaint нужно в неторых случаях выполнять по движению мыши над компонентом, и происходит неприятное моргание, чем слабее машина, тем сильнее заметно,
Подскажите, плз, как лечить.

1. double buffer
2. не рисовать лишнего.
...
Рейтинг: 0 / 0
02.09.2004, 11:52
    #32677060
НЕ СКАЖУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с OnPaint
Еще не знаю как это делается в .NET, но надо рисовать в памяти, потом выводить уже на экран. Думаю такая проблема уже поднималась, поищите по форуму или через поисковики.
...
Рейтинг: 0 / 0
02.09.2004, 13:57
    #32677491
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с OnPaint
НЕ СКАЖУЕще не знаю как это делается в .NET, но надо рисовать в памяти, потом выводить уже на экран. Думаю такая проблема уже поднималась, поищите по форуму или через поисковики.

Ну это надо делать в любом случае, если рисовать больше 2-3 элементов, незавимо от уже предложенных пунктов.
...
Рейтинг: 0 / 0
10.09.2004, 14:12
    #32689697
oablohin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с OnPaint
Уважаемые, я рисовал сначала в памяти(по старой памяти о Borland C++3.11) на Bitmap'e, а затем выводил на экран. НЕ помогает.
...
Рейтинг: 0 / 0
10.09.2004, 16:17
    #32690064
oablohin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с OnPaint
this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer, true);
...
Рейтинг: 0 / 0
20.09.2004, 12:06
    #32701941
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с OnPaint
Моргание вылечить просто:

1. Нужно указать на необходимость использования двойного буферирования в конструкторе:

public MyControl(){
this.SetStyle(ControlStyles.DoubleBuffer, true);
}

2. Создать процедуру прорисовки, например:

private void DoPaint(Graphics g)
{
// здесь прорисовываем свой контрол
// потом бордер
}

3. Создать процедуру для ручной перерисовки с использованием технологии DoubleBuffer:

private void ForceRepaint()
{
Graphics graphics = this.CreateGraphics();
Bitmap bitmap = new Bitmap(this.Width, this.Height, graphics);
Graphics cache = Graphics.FromImage(bitmap);
PaintEventArgs e = new PaintEventArgs(cache, this.DisplayRectangle);

OnPaintBackground(e);
OnPaint(e);

graphics.DrawImageUnscaled(bitmap, 0, 0);

e.Dispose();
cache.Dispose();
bitmap.Dispose();
graphics.Dispose();
}

4. Унаследовать стандартную процедуру перерисовки:

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
DoPaint(e.Graphics);
}

Думаю, это должно помочь. Если останутся вопросы - стучись в асю.

--
WBR, Roman S. Golubin
ICQ UIN: 63253392
...
Рейтинг: 0 / 0
20.09.2004, 12:43
    #32702069
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с OnPaint
oablohinУважаемые, я рисовал сначала в памяти(по старой памяти о Borland C++3.11) на Bitmap'e, а затем выводил на экран. НЕ помогает.

Не помогает потому, что пока ты рисуешь в памяти, контрол обновляет бэкграунд. Вариантов несколько. Но если зарисовываешь всю клиентскую область, достаточно запретить прорисовку бэкграунда:

public MyControl(){
this.SetStyle(ControlStyles.Opaque);
}
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите с OnPaint / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]