Windows: мышь на оформлении окна - PullRequest
5 голосов
/ 27 октября 2008

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

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

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

1 Ответ

7 голосов
/ 27 октября 2008

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

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

...