Мерцание и CreateParams

Я хочу избежать мерцания на панели моего приложения, после поиска в Google 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 раз медленнее, поэтому не рекомендуется использовать сабвуфер override как есть.

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


person ElektroStudios    schedule 09.05.2013    source источник
comment
+1, так как мне тоже очень хотелось бы знать, что это делает (у меня очень похожая проблема). Дополнительная шутка: просто добавь воды   -  person Sayse    schedule 09.05.2013
comment
@Sayse, прочитайте мое обновление, я экспериментировал с использованием этого кода во всех своих программах, и вы видите отрицательный результат ... нам нужны ответы. PS: извините за мой английский   -  person ElektroStudios    schedule 09.05.2013
comment
ах, это позор, снижение скорости делает это решение непригодным для меня :( Моя идея, которую я никогда не пытался реализовать, заключалась в том, чтобы изменить размер только с призрачным контуром, а затем показать окно с новым размером после изменения размера   -  person Sayse    schedule 09.05.2013
comment
Я не знаю, интересно ли вам об этом или нет, но я только что попытался применить расширенный стиль WS_EX_COMPOSITED, и мерцание 0... некоторые из моих кнопок потеряли функциональность, поэтому все еще изучаю это (также теряют другие функции)   -  person Sayse    schedule 22.05.2013


Ответы (1)


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

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

person ThatGuy    schedule 09.07.2015