Как только основное окно создано и показано на экране, функция WinMain может начать исполнять свою первичную задачу, которая состоит в том, чтобы читать сообщения из очереди приложения и рассылать их в соответствующее окно.
Система не отправляет ввод данных непосредственно прикладной программе. Вместо этого она помещает все вводимые данные от мыши и клавиатуры от пользователя в очередь сообщений, наряду с сообщениями, посланными системой и другими приложениями. Приложение должно читать очередь сообщений, извлекать сообщения и распределять их так, чтобы оконная процедура могла обрабатывать их.
Обобщенное приложение использует нижеследующий цикл обработки сообщений:
BOOL bRet; while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0 ) { if (bRet == -1 ) { // обработка ошибки и возможный выход из программы } else { TranslateMessage( &msg ); DispatchMessage( &msg ); } } |
Функция GetMessage извлекает сообщение из очереди. Функция DispatchMessage отправляет каждое сообщение соответствующей оконной процедуре. Функция TranslateMessage преобразует сообщение виртуальной клавиши в символьные сообщения. В Обобщенном приложении, это необходимо, чтобы реализовать клавиши доступа к меню.