Мерцание и "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. Вам все еще требуется двойной буфер для фоновых объектов.