我应该使用.NET的内置双缓冲还是我自己的实现?

时间:2010-06-18 18:48:39

标签: visual-studio-2008 gdi+

我正在使用Visual C ++进行一些GDI +绘图,并注意到我的画布在滚动,调整大小等时看起来不是最好...由于大量闪烁和慢重绘。从我所读到的,解决方案是双缓冲,但是如何实现有相互矛盾的建议。

一些消息来源建议使用现有的.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);

这些方法之间是否存在功能差异,或者我只是将微软在后台所做的工作放在首位?我关注速度和效率,以及使用一种方法而不是另一种方法可能存在的缺陷。

1 个答案:

答案 0 :(得分:1)

只需在构造函数或“属性”窗口中将窗体的DoubleBuffered属性设置为true即可。你在Paint事件中绘图,使用CreateGraphics()是永远不正确的。如果发生需要重新绘制窗口的事件,请调用Invalidate()或Update()。