Как устранить мерцание в Windows.Формирует пользовательский элемент управления при прокрутке?

StackOverflow https://stackoverflow.com/questions/64272

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хочу создать пользовательский элемент управления на C #.Но каждый раз, когда мне приходится полностью перерисовывать свой элемент управления, он мерцает, даже если я использую двойную буферизацию (сначала рисую изображение, а затем закрываю его).

Как мне устранить мерцание, когда мне приходится полностью перерисовывать?

Это было полезно?

Решение

Вы могли бы попробовать поместить следующее в свой конструктор после вызова InitiliseComponent.

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
         ControlStyles.UserPaint |
         ControlStyles.AllPaintingInWmPaint, true);

Редактировать:

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

Другие советы

Я извлек это из рабочей программы на C #.Другие плакаты содержат синтаксические ошибки и явно скопированы с C ++ вместо C#

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
                        ControlStyles.UserPaint |
                        ControlStyles.AllPaintingInWmPaint, true);

Возможно, будет достаточно просто позвонить

SetStyle(ControlStyles::UserPaint | ControlStyles::AllDrawingInWmPaint, true);

Мерцание, которое вы видите, скорее всего, потому, что Windows сначала рисует фон элемента управления (через WM_ERASEBKGND), затем запрашивает ваш элемент управления выполнить любой рисунок, который вам нужно сделать (через WM_PAINT).Отключив фоновую раскраску и выполнив всю раскраску в вашем переопределении OnPaint, вы можете устранить проблему в 99% случаев без необходимости использовать всю память, необходимую для двойной буферизации.

Вы говорите, что пробовали двойную буферизацию, но затем говорите, что сначала рисуете Изображение и удаляете его.Вы пробовали устанавливать DoubleBuffered = true в конструкторе, а не делать это самостоятельно с Изображением?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top