Удивительное число людей имеют магические убеждения о том, как именно отвечают приложениядля пользовательских входов в Windows.Уверяю вас, что это не волшебство.Способ создания интерактивных пользовательских интерфейсов в Windows довольно прост.Когда что-то происходит, например, щелчком мыши по кнопке, операционная система делает это на заметку.В какой-то момент процесс спрашивает операционную систему: «Что-нибудь интересное произошло недавно?»и операционная система говорит «почему да, кто-то нажал эту вещь».Затем процесс выполняет любое действие, подходящее для этого.Что происходит, зависит от процесса;он может игнорировать щелчок, обрабатывать его особым образом или сказать операционной системе «действовать и делать то, что по умолчанию для такого рода событий».Все это, как правило, обусловлено самым простым кодом, который вы когда-либо видели:
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Вот и все.Где-то в центре каждого процесса, имеющего поток пользовательского интерфейса, находится цикл, который замечательно похож на этот.Один звонок получает следующее сообщение.Это сообщение может быть на слишком низком уровне для вас;например, можно сказать, что была нажата клавиша с определенным кодом клавиатуры.Возможно, вы захотите перевести это как «нажата клавиша numlock».TranslateMessage делает это.Там может быть более конкретная процедура, которая имеет дело с этим сообщением.DispatchMessage передает сообщение соответствующей процедуре.
Я хочу подчеркнуть, что это не волшебство.Это время цикла. Он работает как любой другой цикл while в C, который вы когда-либо видели .Цикл многократно вызывает три метода, каждый из которых читает или записывает буфер и предпринимает некоторые действия перед возвратом.Если для возврата одного из этих методов требуется много времени (обычно DispatchMessage является долгосрочным, поскольку именно он фактически выполняет работу, связанную с сообщением), тогда угадайте, что?Пользовательский интерфейс не получает, не переводит и не отправляет уведомления из операционной системы до тех пор, пока он не вернется.