Мерцание и "CreateParams"

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

Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H2000000
            Return cp
        End Get
End Property 'CreateParams

Теперь я хочу знать, что на самом деле делает эти строки кода. Мне нужно понять, что делает этот код с моим приложением,

хороший способ избежать мерцания?

MSDN говорит:

"Свойство CreateParams не должно быть переопределено и использовано для настройки свойств вашего производного элемента управления"

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

Кто-то может объяснить мне больше об этом коде?

UPDATE:

Я тестировал "мерцающее решение" во всех своих приложениях, и да, это мерцающее решение... но имеет отрицательный момент, потому что мои программы вращаются со скоростью около -200% медленнее, я имею в виду, что при использовании этой переопределенной подпрограммы повороты программ намного медленнее, чем в 6 раз медленнее, так что не стоит использовать подпрограмму переопределения как есть.

Кто-то знает, могу ли я избежать мерцания, не ралетизируя свое приложение?

1 ответ

Решение

Каждый раз, когда вы перерисовываете элемент управления, вы также должны перерисовывать фон; операция, для которой ваше приложение не могло требовать ресурсов для выполнения. Решение, которое вы используете, в основном устанавливает флаг, чтобы указать, что вы хотите, чтобы ваша форма и все, что она рисует, были с двойной буферизацией. Вы можете использовать ненужное количество ресурсов с этим. Вместо этого вы можете установить для свойства double buffered значение true для каждого объекта, участвующего в изменении размера вашего изображения. Компьютеры имеют ограниченные ресурсы, и вы должны сохранить как можно больше. По этой причине Microsoft заранее определила так много параметров и процедур освобождения ресурсов.

Редактировать: PictureBox по умолчанию с двойной буферизацией для обработки события onpaint. Вам все еще требуется двойной буфер для фоновых объектов.

Другие вопросы по тегам