Двойная буферизация - PullRequest
       17

Двойная буферизация

0 голосов
/ 24 января 2011

Поддерживается ли двойная буферизация в Windows Mobile 6.5 CE

Ответы [ 2 ]

4 голосов
/ 31 января 2011

Если вы рисуете элементы управления самостоятельно, возможно, вы захотите выполнить собственную двойную буферизацию.
В последнее время я не держал в курсе последних событий с WinCE и предположил, что они в конечном итоге перенесут простоту двойной буферизации, которую вы получаете на рабочий стол, но, возможно, они этого не сделали.

По сути, предпосылка заключается в том, чтобы просто нарисовать изображение, а затем перетащить это изображение на «настоящий» графический объект за один снимок.

Это что-то вроде этого (это по памяти, так что если синтаксис идеален):

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, а затем воссоздать его при изменении размера, а затем добавить некоторый код удаления, чтобы вы могли. Удалите растровое изображение, когда объект умрет.

1 голос
/ 24 января 2011

Это действительно зависит от того, что вы имеете в виду и где.Почти все драйверы дисплея CE используют двойную буферизацию для рисования из видеопамяти на дисплей, чтобы предотвратить разрывы и артефакты (я никогда не видел ни одного, который не делал этого).

Если вы спрашиваете, есть ли какая-то платформа,как, например, Compact Framework, MFC, Direct Show или что-то еще, поддерживает его через API, тогда нам нужно знать, о какой платформе вы говорите.

...