Обновить проблемы с двойными буферизованными пользовательскими элементами управления - PullRequest
2 голосов
/ 17 февраля 2012

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

    SetStyle(ControlStyles.UserPaint, true);
    SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    SetStyle(ControlStyles.DoubleBuffer, true);

Не помогает.В качестве слияния я поместил элемент управления Timer в окно и установил его обновление каждые 10 миллисекунд.Это кажется очень грязным.

Если я отключаю двойную буферизацию, то элемент управления корректно обновляется, но в противном случае происходит сбой из-за мерцания.

Правка: в пользовательском элементе управления нет дочерних оконВся поверхность пользовательского элемента управления рисуется в событии рисования с использованием графических методов.Использование WS_EX_COMPOSITED устранило проблему с перетаскиванием, но осталась проблема с остриями, оставляющими пустую область при их закрытии.Пока единственное исправление - это таймер обновления, и я надеюсь, что кто-то знает больше магии окон.

1 Ответ

2 голосов
/ 17 февраля 2012

Похоже, вы приближаетесь к пределам рисования в Winforms :) Посмотрите на верхний ответ на этот вопрос, размещенный здесь: Как устранить мерцание в пользовательских элементах управления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...