| Автор
| Сообщение |
|
|
|
Цитата |
|
Немогу понять цикл обработки сообщений, который выглядит следующим образом:
while GetMessage(pMsg,0,0,0) do
begin
TranslateMessage(pMsg);
DispatchMessage(pMsg);
end;
Ну я догадываюсь что функция GetMessage(pMsg,0,0,0) принимает сообщение, а вот осталные функции... |
|
| В начало |
|
 |
|
|
 |
 TuXAPuK
Великий гонщик


Возраст: 26
Знак зодиака: 
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
|
|
|
Цитата |
|
Этот код зацикливает программу, не расходуя процессорное время...
Вспоминаем Task Manager и System Idle Process... То-есть в отличии от while (true) do; Программа перестаёт нагло жрать процессорное время так как фактически вечно ожидает сообщение от ОС...
Где в GetMessage
Первый параметр = сама структура сообщения
Второй параметр = от какого окна ожидать сообщение (0 = От всех видимых и не видимых окон программы)
Третий, Четвёртый = Какой диапазон сообщений ожидает программа (если 0,0 то все сообщения принимаются можно так-же использовать 0, WORD($FFFFFFFF) )
Далее идёт TranslateMessage которая как-бы конвертирует сообщение
И заключает этот круг DispatchMessage которая передаёт сообщение далее по программе...
Фактически вечное чтение всех сообщений от всех окон и передачи его далее по цепочке...
При ShutdownWindows GetMessage возвращает false и зацикливание прекращается, далее твоя программа отключает свои классы, окна, сохраняет свои настройки, и.т.п. _________________
 |
|
| В начало |
|
 |
|