Следующий код создает черное мерцание на экране прямо перед отображением формы (прозрачно). Мне интересно, какие у меня есть варианты для удаления этого мерцания?
Form f = new Form();
f.BackColor = Color.Lime;
f.TransparencyKey = f.BackColor;
f.StartPosition = FormStartPosition.Manual;
f.Bounds = Screen.PrimaryScreen.WorkingArea;
f.Show();
Я получаю те же результаты, если создаю новый проект, устанавливаю фон формы на Lime и TransparencyKey на Lime, затем нажимаю Run.
Что я пробовал:
Установите непрозрачность на 99% — такое же мерцание
Принудительно WS_EX_COMPOSITED в OnCreateParams или с помощью SetWindowLong — такое же мерцание
Показать окно меньше, или ширину 0, или за пределы экрана, а затем переместить в нужное место - вызывает проблемы с отображением, когда окна позади моей формы не перерисовываются правильно.
Установка ControlStyles.Opaque, ControlStyles.UserPaint и нескольких других комбинаций ControlStyles и переопределение различных событий рисования/отрисовки фона — разные результаты, либо такое же мерцание, либо худшее мерцание, либо непрозрачная форма.
Переход на WPF может быть вариантом, но на самом деле не ищите «использовать WPF» в качестве ответа.