Мерцание в приложении Windows Forms

У меня есть приложение, которое имеет тонну средств управления на нем. И это имеет значительную сумму мерцания, особенно на запуске.

Я применил эту фиксацию к нему.

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED
            return cp;
        }
    } 

Это работало отлично - мерцание было уменьшено довольно невероятной суммой. Однако побочный эффект состоит в том, что Минимизирование, Максимизируйте, и кнопки Close в верхнем правом из окна не анимируют, когда я перемещаю мышь или нажимаю на них (они все еще работают хотя). Это дает приложению подвешенное чувство.

Как я сохраняю WS_EX_COMPOSITED, все еще сохранение удобства использования Максимизирует, кнопки Minimize и Close?

Это происходит на Windows XP. Как @fallenidol указанный, это не проблема о Windows 7.

22
задан Community 23 May 2017 в 12:00
поделиться

3 ответа

Я разобрался с этим. Хитрость заключается в том, чтобы снять флаг WS_EX_COMPOSITED после показа формы. Полное объяснение и код в моем блоге:

Как избавиться от мерцания в приложениях Windows Forms

14
ответ дан 29 November 2019 в 05:29
поделиться

Вам следует попробовать стандартное свойство элемента управления windows forms под названием DoubleBuffered. http://msdn.microsoft.com/en-us/library/system.windows.forms.control.doublebuffered.aspx

0
ответ дан 29 November 2019 в 05:29
поделиться

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

        // Enable double duffering to stop flickering.
        this.SetStyle(ControlStyles.DoubleBuffer, true);
        this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
        this.SetStyle(ControlStyles.UserPaint, true);
        this.SetStyle(ControlStyles.SupportsTransparentBackColor, false);
        this.SetStyle(ControlStyles.Opaque, false);
        this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
        this.SetStyle(ControlStyles.ResizeRedraw, true);
4
ответ дан 29 November 2019 в 05:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: