双缓冲

时间:2011-01-24 12:53:01

标签: windows-mobile compact-framework

Windows Mobile 6.5 CE是否支持双缓冲

2 个答案:

答案 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支持它,那么我们需要知道你在谈论什么框架。