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

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

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

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
Помогите с OnPaint
    #32702069
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oablohinУважаемые, я рисовал сначала в памяти(по старой памяти о Borland C++3.11) на Bitmap'e, а затем выводил на экран. НЕ помогает.

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

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


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