Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Событийная модель Windows
Показать сообщение отдельно

Аватара для CyraxZ

Ветеран


Сообщения: 784
Благодарности: 11

Профиль | Отправить PM | Цитировать


Цитата:
Поток может использовать функцию WaitMessage, для того, чтобы передать управление другим потокам, пока в его очереди сообщений нет никаких сообщений. Эта функция останавливает работу потока и не возобновляет ее до появления нового сообщения в очереди сообщений потока.
А есть ли смысл продолжать работу потока, когда в его очереди сообщений нет последних ?
Т.е. почему бы всегда не останавливать работу потока до появления новых сообщений (т.е. до тех пор, пока очередь сообщений станет непустой) ?
Ведь во фрагменте кода потока, где циклически проверяется очередь сообщений, никаких других действий, кроме проверки этой очереди, не происходит. Т.е. цикл будет крутиться впустую...

Цитата:
Если поток получает ввод с клавиатуры, то цикл сообщений должен иметь функцию TranslateMessage. Система генерирует сообщения виртуальных клавиш (WM_KEYDOWN и WM_KEYUP) при каждом нажатие клавиши пользователем. Сообщение виртуальной клавиши содержит код виртуальной клавиши, который показывает какая, была нажата клавиша (а не ее символьное значение). Функция TranslateMessage переводит сообщение виртуальной клавиши в символьное сообщение (WM_CHAR) и помещает его обратно в очередь сообщений приложения. Это символьное сообщение будет извлечено на следующей итерации цикла сообщения и передано оконной процедуре.
Правильно ли я понял, что сообщения виртуальных клавиш посылаются системой в очередь сообщений только одного потока, соответствующего активному окну (т.е. неактивные окна это сообщение не получают) ?

Цитата:
Приложение, использующее акселераторные клавиши должно переводить клавиатурные сообщения в командные. Для этого цикл сообщения должен содержать вызов функции TranslateAccelerator.
Акселераторные клавиши - это какие ?
___________________________________
И как быть с событиями неграфических объектов (т.е. не имеющих графического представления и, следовательно, не имеющих дескрипторов), например, в Delphi или C++ Builder (которые шлёпают мышой на форму)? Должно быть, эти события - не что иное, как обычный вызов обработчиков (методов объекта) из других методов этих объектов. Т.е. никаких манипуляций с очередями сообщений потоков здесь не происходит...

Отправлено: 21:06, 13-11-2006 | #4

Название темы: Событийная модель Windows