Development and My Projects

събота, 10 ноември 2007 г.

Don't Flicker! Double Buffer!

Здравейте!

Днес се сблъсках с един отвратителен проблем при 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.

Статията още не е довършена!