Эта функция переводит сообщения формата виртуальных клавиш в сообщения символы.
BOOL TranslateMessage ( CONST MSG *lpMsg // структура с информацией о сообщении );
lpMsg - это структура полученная в результате вызова функций GetMessage() или PeekMessage(). Функция вернет значение отличное от нуля в случае, если перевод произведен. Если сообщение типа WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, или WM_SYSKEYUP, то возвращаемое значение всегда отличное от нуля. Эта функция не изменяет структуру MSG, а добавляет новые сообщения. Вот так:
WM_KEYDOWN + WM_KEYUP -> WM_CHAR или WM_DEADCHAR WM_SYSKEYDOWN + WM_SYSKEYUP -> WM_SYSCHAR или WM_SYSDEADCHAR
То есть эта функция на первом этапе производит обработку сообщений и создает сообщения более крупные по группе. Нам уже можно не анализировать, что нажата и отпущена клавиша, а просто можно обрабатывать сообщение "введена буква". Каждый процесс должен использовать эту функцию для обработки сообщений. Пример типичного использования:
while (GetMessage(&msg, (HWND) NULL, 0, 0)) { if (TranslateAccelerator(hwndMain, haccl, &msg) == 0) { TranslateMessage(&msg); DispatchMessage(&msg); } }
Этот пример хоть и классический, но уже устаревший. Новая интерпретация его такая:
while (ret) { ret = GetMessage(&msg, NULL, 0, 0); if( (int) ret != -1 ) { TranslateMessage(&msg); DispatchMessage(&msg); } return( ret ); }