Как избежать мерцания интерфейса в приложении Windows CE? - PullRequest
0 голосов
/ 02 февраля 2012

Я разрабатываю приложение в Windows CE 5.0, используя c # .net с Visual Studio 2008. Я хочу отобразить некоторые пользовательские элементы управления в основном пользовательском элементе управления путем создания объекта пользовательского элемента управления.При загрузке пользовательских элементов управления в основной пользовательский элемент управления приложение мерцает.

Например, у меня есть 1 пользовательский элемент управления с 1 изображением кнопки, я хочу отобразить 20 кнопок этого пользовательского элемента управления.

`protected override void OnPaint (PaintEventArgs e) {//base.OnPaint(e);Graphics gxOff = e.Graphics;Графика g;

        //Paint the string
        Font boldFont = new Font("Tahoma", 8.0F, FontStyle.Bold);
        Color penColor = Color.FromArgb(48, 48, 48);

        StringFormat drawFormat = new StringFormat();
        drawFormat.Alignment = StringAlignment.Center;
        if (m_bmpOffscreen == null) //Bitmap for doublebuffering
        {
            m_bmpOffscreen = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
        }

        g = Graphics.FromImage(m_bmpOffscreen);

        g.Clear(this.BackColor);

        if (!Disabled)
        {
            backgroundImage = unselected_img;
            if (selected)
            {
                backgroundImage = selected_img;
                g.DrawImage(backgroundImage, this.ClientRectangle, new Rectangle(0, 0, backgroundImage.Width, backgroundImage.Height), GraphicsUnit.Pixel);
            }
            else
                g.DrawImage(backgroundImage, this.ClientRectangle, new Rectangle(0, 0, backgroundImage.Width, backgroundImage.Height), GraphicsUnit.Pixel);
        }
        else
        {
            backgroundImage = disabled_img;
            g.DrawImage(backgroundImage, this.ClientRectangle, new Rectangle(0, 0, backgroundImage.Width, backgroundImage.Height), GraphicsUnit.Pixel);
        }

        g.DrawString(this.Content, boldFont, new SolidBrush(penColor), new RectangleF(0, 3, 20, 20), drawFormat);

        gxOff.DrawImage(m_bmpOffscreen, 0, 0);
    }`

Пожалуйста, помогите решить эту проблему.

Заранее спасибо.

1 Ответ

0 голосов
/ 27 февраля 2012

Ваш код заднего буфера выглядит нормально, хотя я бы порекомендовал держать ваш объект Graphics вокруг.Вы можете утилизировать и обновить его, а также буфер Bitmap в OnResize - обязательно проверьте допустимый размер.Я подозреваю, что вы, возможно, видите мерцание от поведения по умолчанию OnPaintBackground, попробуйте переопределить и не активировать его.

...