[Закрыто] Как сделать, чтобы не мигала картинка при перерисовке окна?
- стирать старый квадрат, рисовать новый, при этом не трогать фон;
- рисовать в буфер, затем выводить;
П.С. мне казалось, что в последних версиях все контролы по умолчанию рисуются в буфер перед выводом, поэтому мерцание кажется странным
- стирать старый квадрат, рисовать новый, при этом не трогать фон;Этот вариант пробовал: полностью картинка не мигает, но квадрат все равно мигает
Разобрался: по умолчанию отключена двойная буферизация, если ее включить, перестает мигать
это на твоём компе в данный момент времени при таких вот обстоятельствах не моргает.
а при других обстоятельствах она и на твоём компе может начать моргать, не говоря уже об абстракном юзвере в вакуумею.
все нормальные гуи рисуются сначала на конве, а потом уже на экран.
лучше подсмотри как это делается где-нибудь и сделай также.
все нормальные гуи рисуются сначала на конве, а потом уже на экран.а двойная буферизация делает это как-то по другому?
даже если вся отрисовка исключительно OnPaint всё равно иногда моргает.
Там много всяких нюансов.пример?
ну, допустим даже если отдельно взятый контрол сам по себе при отрисовке себя не моргает, ничто не сможет помешать моргать ему целиком когда ты их накидаешь десяток-другой на форму, загрузишь проц на 100%, и вот у тебя форма, начинаешь её ресайзить, а на ней на месте контрола то серый квадратик, то контрол появляются.
Хотя конечно если каких-то объектов много, то стоит уже задуматься их целиковым классом делать с общей отрисовкой.
Тема нюансов не раскрыта. Неясно чем отличается от рисования в контекст в памяти с последующим битблт.
на конвеOh, shi
и вот у тебя форма, начинаешь её ресайзить, а на ней на месте контрола то серый квадратик, то контрол появляются.так такое получается, если для контрола double-buffer-включили, а для формы забыли...
А в шарпе я ни бум-бум. Я про свой опыт общения с гуёвинами в целом.
В VCL (по крайней мере) double-buffered наследуется от овнера по дефолту. также как и шрифт, и т.д.Что значит наследуется? Если включен у родителя, то включен и у дочернего окна. Так говорил как раз о том случае, когда у родителя выключен double-buffering, а у дочернего окна - включен.
ps. Владелец (owner) - не то же самое, что и родитель (parent от owner'а сомневаюсь, что что-то наследуется.
Оставить комментарий
agent007new
В программировании гуя не очень силен. Написал вот такую программку на шарпеЗдесь приведен кусок кода, который я добавил к стандартному WinForms проекту. Смысл этого кода в том, чтобы таскать закрашенный квадрат мышкой. Но при таскании окно "мигает". Как правильно нужно делать такую вещь, чтобы не было миганий?