在windows mobile 6.5 CE中是否支持双缓冲
发布于 2011-02-01 00:41:04
如果您自己绘制控件,那么您可能需要考虑执行您自己的双缓冲。
我最近并没有大量更新WinCE,我本以为他们最终会移植你在桌面上得到的双缓冲,但也许他们没有。
基本上前提是只绘制一个图像,然后在一次拍摄中将该图像blit到“真正的”图形对象上。
它是这样的“某种东西”(这是从内存中提取出来的,所以如果语法完美的话,就是idk ):
public class DoubleBufferedControl : Control
{
protected override OnPaint(object sender, PaintEventArgs e)
{
using(Bitmap bitmap = new Bitmap(Width, Height))
{
using(Graphics graphics = Graphics.FromImage(bitmap))
{
DoPaint(sender, new PaintEventArgs(graphics));
e.Graphics.DrawImage(bitmap, 0, 0);
}
}
}
protected virtual DoPaint(object sender, PaintEventArgs e)
{
/* left empty for overrides */
}
protected override OnPaintBackground(object sender, PaintEventArgs e)
{
/* do nothing */
}
}然后使您自己的所有控件继承自此,并将您的绘制代码添加到DoPaint的覆盖中。
你可能想要修改上面的代码,只创建一次位图(ctor),处理.Dispose事件,然后在调整大小时重新创建它,然后添加一些处理代码,这样当对象死了时,你就可以重新创建位图了。
发布于 2011-01-24 22:25:06
这真的取决于你到底是什么意思以及在哪里。几乎所有CE显示驱动程序都使用双缓冲从显存绘制到显示器,以防止撕裂和伪影(我从未见过没有这种情况的驱动程序)。
如果你在问某个框架,比如Compact framework,MFC,Direct Show或其他什么,是否通过API支持它,那么我们需要知道你说的是什么框架。
https://stackoverflow.com/questions/4782194
复制相似问题