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

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

8
задан Lars Truijens 15 September 2008 в 16:38
поделиться

4 ответа

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

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

Править:

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

13
ответ дан 5 December 2019 в 07:37
поделиться

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

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
                        ControlStyles.UserPaint |
                        ControlStyles.AllPaintingInWmPaint, true);
8
ответ дан 5 December 2019 в 07:37
поделиться

Это может быть достаточно хорошо, чтобы просто звонить

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

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

1
ответ дан 5 December 2019 в 07:37
поделиться

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

0
ответ дан 5 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: