C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Нетология

 53 - TranslateMessage() / Win 32 API / Win32 API

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

| |
Автор Каев Артем.
[AD]





Letyshops [lifetime]