Я занимаюсь рисованием 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 делает в фоновом режиме? Я обеспокоен как скоростью, так и эффективностью, а также возможными ошибками использования одного подхода над другим.