5.10.5 - Использование клавиатуры для перемещения курсора

Поскольку Windows не требует мыши, прикладная программа должна получить возможность, чтобы моделировать действия мыши с клавиатуры. Следующий пример показывает, как достичь этого, используя функции GetCursorPos и SetCursorPos и обрабатывать ввод информации от клавиш курсора.

HCURSOR hCurs1, hCurs2;    			// дескриптор курсора
POINT pt;                  			// расположение курсора
RECT rc;                   			// координаты рабочей области
static int repeat = 1;     			// счетчик повтора нажатий клавиши

//
// Другие объявления и инициализация.
//

switch (message)
{
//
// Обработка других сообщений.
//
	case WM_KEYDOWN:

		if (wParam != VK_LEFT && wParam != VK_RIGHT &&
		wParam != VK_UP && wParam != VK_DOWN)
		{
			break;
		}

		GetCursorPos(&pt);

		// Преобразование экранных координат в рабочие координаты.

		ScreenToClient(hwnd, &pt);

		switch (wParam)
		{
		// Отображение перемещения курсора, когда
		// нажата клавиша курсора.

			case VK_LEFT:	// стрелка влево
				pt.x -= repeat;
				break;

			case VK_RIGHT:	// стрелка вправо
				pt.x += repeat;
				break;

			case VK_UP:	// стрелка вверх
				pt.y -= repeat;
				break;

			case VK_DOWN:	// стрелка вниз
				pt.y += repeat;
				break;

			default:
				return NULL;

		}

		repeat++;	// счетчик увеличения числа повторов на единицу
			// Сохранение курсора в рабочей области.

		GetClientRect(hwnd, &rc);


		if (pt.x >= rc.right)
		{
			pt.x = rc.right - 1;
		}
		else
		{
			if (pt.x < rc.left)
			{
				pt.x = rc.left;
			}
		}

		if (pt.y >= rc.bottom)
			pt.y = rc.bottom - 1;
		else
			if (pt.y < rc.top)
				pt.y = rc.top;

		// Преобразование рабочих координат в экранные координаты.

		ClientToScreen(hwnd, &pt);
		SetCursorPos(pt.x, pt.y);
		break;

	case WM_KEYUP:

		repeat = 1;	// очистка счетчика повторений
		break;
}

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