У меня есть окно, созданное с помощью стиля окна WS_EX_LAYERED
. В настоящее время я рисую на растровое изображение с использованием GDI + и используя UpdateLayeredWindow
для обновления графического содержимого моего многоуровневого окна. Я намерен использовать это окно в качестве основного окна моего приложения, которое потребует его для частого перерисовки.Правильный метод перерисовки многоуровневого окна
Увидев, что в качестве многоуровневых окон не получено сообщение WM_PAINT
[?], мне нужно разработать соответствующий метод для повторного рисования окна. Оптимизация не важно, но всегда приятно иметь ваш торт и съесть его тоже. Поэтому я ищу «правильный» метод для использования.
Вот мои мысли до сих пор:
Я бы предположил, что это хорошая идея, чтобы сделать на смещенном экране растрового изображения до того
BitBlt
Инг или аналогичные.60 кадров в секунду должно быть (более?) Достаточно (но как это соотносится с частотой кадров других приложений?).
Возможные решения:
SetTimer
Использование отправитьWM_TIMER
сообщение на регулярной основе.Полезно, потому что через задания значения тайм-аута, можно достичь желаемых моих кадров в секунду, без необходимости, чтобы измерить длительность «рамке» требуется, чтобы быть оказаны.
Вероятно, причиной ввода или других задержек является частота и скорость сообщений.
Рендеринг кадров только при возникновении определенных событий, таких как изменение размера окна.
Требуется, чтобы я выяснил все события, которые потребуют перерисовки.
Было бы значительно уменьшено количество ненужных кадров.
Рендер кадров, когда нет никаких сообщений в очереди сообщений, путем проверки
PeekMessage
.Это может замедлить обработку оконных сообщений.
Это приведет к высокому использованию ЦП, поскольку обрабатывается больше кадров, чем необходимо.
Создать новую тему для выполнения цикла рендеринга.
- Расчет сроков должен выполняться для поддержания стабильной частоты кадров.
Застряли в UpdateLayeredWindow? Можно создать многоуровневое окно с WM_PAINT с помощью SetLayeredWindowAttributes. Если это возможно с помощью этого, вы избавитесь от вопроса о подготовке механизма обновления. – xMRi
«Как это соотносится с частотой кадров других приложений?» Если приложение не анимирует что-то или не отображает видео, его частота кадров будет равна нулю. Чтобы повторно перерисовать экран без каких-либо оснований - это украсть процессорное время из более продуктивных применений, сгладить батареи ноутбуков, изнашивать вентиляторы и сделать себя целью для удаления. Серьезно, если ваше приложение ничего не делает, ничего не делайте. – arx