我正在做一些GDI +在Visual C++中繪圖,並注意到當滾動,調整大小等時,由於大量的閃爍和緩慢重繪,我的畫布看起來並不是最好的。從我讀過的內容來看,解決方案是加倍緩衝,但是有關如何實現的建議存在衝突。我應該使用.NET的內置雙緩衝還是我自己的實現?
幾個來源建議用現有的.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的背景帶到了前沿?我很關心速度和效率,以及使用一種方法的可能的缺陷。
我一直使用構建雙緩衝,它允許我重畫一個60fps的全屏應用程序(只要我不畫太複雜的幾何圖形)。雖然我確實確保我的緩衝圖像具有與屏幕完全相同的像素格式。 – 2010-06-18 18:50:55
就我個人而言,我會首先嚐試內置雙緩衝來查看它是否「足夠好」。那麼只有在DIY路線仍然存在問題的情況下。 – ChrisF 2010-06-18 18:51:04