У меня есть приложение, которое имеет тонну средств управления на нем. И это имеет значительную сумму мерцания, особенно на запуске.
Я применил эту фиксацию к нему.
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.
Я разобрался с этим. Хитрость заключается в том, чтобы снять флаг WS_EX_COMPOSITED после показа формы. Полное объяснение и код в моем блоге:
Вам следует попробовать стандартное свойство элемента управления windows forms под названием DoubleBuffered. http://msdn.microsoft.com/en-us/library/system.windows.forms.control.doublebuffered.aspx
Попробуйте следующий код. Это должно быть в основной форме и любых других пользовательских элементах управления, которые у вас есть.
// 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);