C++ Windows API окно с FPS

145
13 января 2019, 15:40

Каждый раз когда я что-нибудь рисую на окне нужно вызвать Redraw для перерисовки окна. Как запустить поток обновления окна или что сделать чтобы окно перерисовывалось постоянно и имело FPS?

Answer 1

У вас перепутаны причина и следствие. Вы пишете "Каждый раз когда я что-нибудь рисую на окне нужно вызвать Redraw для перерисовки окна", но на самом деле все происходит ровно наоборот - рисование в окне является результатом RedrawWindow (или, что чаще, результатом InvalidateRect/InvalidateRgn).

1) Когда вам необходимо обновить часть окна, вы там ничего не рисуете, а вызываете Invalidate*, объявляя часть окна требующей обновления. То же самое может сделать и Windows. Вызывать функцию RedrawWindow обычно нет необходимости, она делает то же самое, что Invalidate*, но при этом форсирует WM_PAINT. Как правило, это лучше оставить на усмотрение системы.

2) Вы должны также написать обработчик WM_PAINT, вот он и рисует все что надо. Устанавливается clipping region (чтобы не тратить времени на отрисовку не изменившихся областей), а дальше рисуете как душе угодно - со стиранием фона, через bitblt, и т.д и т.п. Этот обработчик работает в том же потоке, что и цикл сообщений (в главном потоке то есть), и вызывает его система.

Ни создавать отдельный поток отрисовки, ни перерисовывать окно постоянно не нужно. Все уже сделано грамотно и оптимально, вряд ли вам удастся как-то ускорить рисование. Если же главный поток тратит много времени на вычисления, их и нужно вынести в рабочий поток, а главный пусть и дальше занимается отрисовкой и вообще UI.

Если нужно в маленьком окошке постоянно выводить FPS или еще что, по таймеру вызывайте InvalidateRect для этого кусочка экрана, а выводите его также в обработчике WM_PAINT.

READ ALSO
Ошибка в функции sort()

Ошибка в функции sort()

Почему ошибку выдает?

160
Python в C++ коде

Python в C++ коде

Есть необходимость в написании пользовательских скриптов на Python в программе написанной на С++(QT MinGW-32bit)

166
Собранный проект не запускается в Qt5

Собранный проект не запускается в Qt5

Собрал проект в Qt510, сборщик mingw530_32

184
Не соединяется сигнал и слот

Не соединяется сигнал и слот

У класса QComboBox есть сигнал, и 2 перегрузки:

159