Don't Flicker! Double Buffer!
Здравейте!
Днес се сблъсках с един отвратителен проблем при Windows Forms, познат на повечето хора писали в тази среда :). Даже може и вие да сте го срещали вече, ако сте забелязали понякога Windows Task Manager започва да примигва когато посочете процес. Точно това ще се опитаме да разрешим при нашите апликации, защото е доста неприятно и отблъскващо.
За момента единственото решение, което ми хрумна е използването на Double Buffer!
При него се създават два буфера единият чете, докато другият пише, при което да се надяваме ще успее да реши проблема с досадното премигване...
Значи проблемът се проявява най-силно когато използваме GDI++ на C#.Net и реших примерът който ще покажа да използва точно тези технологии.
Първото нещо което трябва да направим е да включим Double Buffer-а, това правим по следният начин:дддд
и другото което е трябва да предифинираме функцията OnPaint:
П.П. програмата е написана от Gil Schmidt.
Статията още не е довършена!
Днес се сблъсках с един отвратителен проблем при Windows Forms, познат на повечето хора писали в тази среда :). Даже може и вие да сте го срещали вече, ако сте забелязали понякога Windows Task Manager започва да примигва когато посочете процес. Точно това ще се опитаме да разрешим при нашите апликации, защото е доста неприятно и отблъскващо.
За момента единственото решение, което ми хрумна е използването на Double Buffer!
При него се създават два буфера единият чете, докато другият пише, при което да се надяваме ще успее да реши проблема с досадното премигване...
Значи проблемът се проявява най-силно когато използваме GDI++ на C#.Net и реших примерът който ще покажа да използва точно тези технологии.
Първото нещо което трябва да направим е да включим Double Buffer-а, това правим по следният начин:дддд
this.SetStyle(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer, true);
Следният код трябва да поставите в конструктора на основният клас.и другото което е трябва да предифинираме функцията OnPaint:
protected override void OnPaint(PaintEventArgs e)
{
// тук е кодът, които
// ще използваме за чертане
}
Кодът на програмата може да изтеглите от тук , а тук е и самият изпълним файл.П.П. програмата е написана от Gil Schmidt.
Статията още не е довършена!