Шаг 53 - 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 );
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 25.01.2001