Должен ли я использовать встроенную двойную буферизацию .NET или мою собственную реализацию? - PullRequest
1 голос
/ 18 июня 2010

Я занимаюсь рисованием GDI + в Visual C ++ и заметил, что мой холст не выглядит лучше при прокрутке, изменении размера и т. Д. Из-за большого количества мерцаний и медленных перерисовок. Из того, что я прочитал, решение состоит в том, чтобы удвоить буфер, но есть противоречивые предложения о том, как реализовать.

Несколько источников предлагают использовать существующую реализацию .NET, например:

using namespace System::Windows::Forms;  
this->SetStyle(ControlStyles::AllPaintingInWmPaint |  
               ControlStyles::UserPaint |  
               ControlStyles::DoubleBuffer, true);

Многие другие источники рекомендуют просто рисовать на собственном растровом изображении и затем выводить его на экран:

dbBitmap = gcnew Bitman(ClientRectangle.Width, ClientRectangle.Height);
dbGraphics = Graphics::FromImage(dbBitmap);

// use the graphics object to do everything you need to here

this->createGraphics()->DrawImageUnscaled(dbBitmap, 0, 0);

Есть ли функциональная разница между этими подходами, или я бы просто выдвинул на первый план то, что Microsoft делает в фоновом режиме? Я обеспокоен как скоростью, так и эффективностью, а также возможными ошибками использования одного подхода над другим.

1 Ответ

1 голос
/ 18 июня 2010

Просто установите для свойства DoubleBuffered формы значение true в конструкторе или в окне «Свойства».У вас есть для рисования в событии Paint, использование CreateGraphics () никогда не бывает правильным.Вызовите Invalidate () или Update (), если что-то случится, и потребуется перекрасить окно.

...