Вопрос

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

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top