Windows: мышь на оформлении окна

Я заметил, что почти в любом приложении Windows нажатие кнопки мыши в области, не являющейся клиентом, останавливает рисование. Почему это требуется?

Например, у меня есть приложение Managed Direct 3D, которое отображает вращающийся куб. Если я наведу указатель на строку заголовка и удержу кнопку мыши нажатой, куб перестанет вращаться, даже если я не закодировал ни одного такого условия в своем цикле.

Почему живопись остановлена? Каковы преимущества? Самое главное, как я могу обойти это?

1 ответ

Решение

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

Обходите его, вызывая анимацию в ответ на сообщения: таймер кажется мне хорошим выбором.

Другие вопросы по тегам