Windows Mobile 6.5 CE是否支持双缓冲
答案 0 :(得分:4)
如果您自己绘制控件,那么您可能需要考虑执行自己的双缓冲 我最近没有与WinCE保持最新状态,并且假设他们最终可以轻松实现你在桌面上获得的双缓冲,但也许他们还没有。
基本上,前提是只绘制一幅图像,然后将该图像显示在"真实"图像对象一次性。
它"某事"像这样(如果语法是完美的,这来自内存,所以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),处理resize事件,然后在resize上重新创建它,然后添加一些处理代码,这样你就可以。当对象死亡时,删除位图。
答案 1 :(得分:1)
这实际上取决于你的意思和地点。几乎所有的CE显示驱动程序都使用双缓冲从视频内存到显示器,以防止撕裂和伪影(我从来没有见过没有)。
如果你问一些框架,比如Compact Framework,MFC,Direct Show或其他什么框架,通过API支持它,那么我们需要知道你在谈论什么框架。