Как Windows выполняет синхронизированную анимацию Gui? - PullRequest
3 голосов
/ 20 января 2011

Когда я использую Spy ++, я замечаю, что нажатие кнопки мыши вызывает серию WM_TIMER.

Как Windows это делает? Требуется ли, чтобы ОС уведомляла об этом или вызывала указатель функции через X миллисекунд, или виджет регистрирует свой собственный таймер proc?

Причина, по которой я хочу это знать, заключается в том, что я создаю игровой интерфейс на C ++ и хочу внедрить такой механизм.

Спасибо

Ответы [ 3 ]

5 голосов
/ 20 января 2011

Я считаю, что процедура окна кнопки использует функцию SetTimer, чтобы зарегистрировать окно для уведомления через сообщение WM_TIMER. Вы можете использовать SetTimer для вызова определенной функции по истечении времени или для вызова сообщения WM_TIMER с указанной информацией.

1 голос
/ 20 января 2011

Возможности анимации графического интерфейса MS Windows очень ограничены.Вы ничего не можете сказать, если бы вы знали настоящую ОС с поддержкой анимации, такую ​​как Mac OS X.

Windows GUI представляет собой набор различных дочерних окон, которые имеют собственную подпрограмму обработчика событий и код рисования.Конечно, очень неуклюжий и неэффективный, он обеспечивает легкий доступ только для обычных разработчиков.

Короче говоря, я хочу сказать, что MS Windows - наименее рекомендуемый справочник для разработки игрового графического интерфейса.Если у меня будет возможность разработать новую среду графического интерфейса, первым делом я бы разработал механизм для разделения обработки входных событий и графического рисования для сводного рисования экрана, как это делают игровые программы.

Посмотрите на это:1007 *http://www.rawmaterialsoftware.com/juce.php

http://www.rawmaterialsoftware.com/images/demoscreenshot1.jpg

0 голосов
/ 20 января 2011

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

Самоанимационные элементы управления, которые создаются как дочерние окна, могут планировать сообщения WM_TIMER для себя через SetTimer, обычно для обработки краткосрочных состояний - в вашем случае, вероятно, Button использовал API TrackMouseEvent, чтобы получать уведомление через WM_MOUSELEAVE, когда мышь покидает кнопку .

Чтобы разрешить более сложные анимации в приложениях на основе форм, Microsoft представила Диспетчер анимации Windows .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...