首页
学习
活动
专区
圈层
工具
发布

双缓冲
EN

Stack Overflow用户
提问于 2011-01-24 20:53:01
回答 2查看 880关注 0票数 0

在windows mobile 6.5 CE中是否支持双缓冲

EN

回答 2

Stack Overflow用户

发布于 2011-02-01 00:41:04

如果您自己绘制控件,那么您可能需要考虑执行您自己的双缓冲。

我最近并没有大量更新WinCE,我本以为他们最终会移植你在桌面上得到的双缓冲,但也许他们没有。

基本上前提是只绘制一个图像,然后在一次拍摄中将该图像blit到“真正的”图形对象上。

它是这样的“某种东西”(这是从内存中提取出来的,所以如果语法完美的话,就是idk ):

代码语言:javascript
复制
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事件,然后在调整大小时重新创建它,然后添加一些处理代码,这样当对象死了时,你就可以重新创建位图了。

票数 4
EN

Stack Overflow用户

发布于 2011-01-24 22:25:06

这真的取决于你到底是什么意思以及在哪里。几乎所有CE显示驱动程序都使用双缓冲从显存绘制到显示器,以防止撕裂和伪影(我从未见过没有这种情况的驱动程序)。

如果你在问某个框架,比如Compact framework,MFC,Direct Show或其他什么,是否通过API支持它,那么我们需要知道你说的是什么框架。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4782194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档