TranslateMessage()

Эта функция переводит сообщения формата виртуальных клавиш в сообщения символы.

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 );
}
 
« Предыдущая статья   Следующая статья »