У меня довольно сложный пользовательский элемент управления с двойной буферизацией.Работает очень хорошо, за исключением случаев, когда над ним перемещается другое окно.Это приводит к дырам в элементе управления, где он не был обновлен.Это не перекрашивает себя правильно.Я попробовал все обычные исправления ...
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
Не помогает.В качестве слияния я поместил элемент управления Timer в окно и установил его обновление каждые 10 миллисекунд.Это кажется очень грязным.
Если я отключаю двойную буферизацию, то элемент управления корректно обновляется, но в противном случае происходит сбой из-за мерцания.
Правка: в пользовательском элементе управления нет дочерних оконВся поверхность пользовательского элемента управления рисуется в событии рисования с использованием графических методов.Использование WS_EX_COMPOSITED устранило проблему с перетаскиванием, но осталась проблема с остриями, оставляющими пустую область при их закрытии.Пока единственное исправление - это таймер обновления, и я надеюсь, что кто-то знает больше магии окон.