Поскольку система не требует мыши, приложение должно быть в состоянии, имитировать действия мыши с клавиатуры. Пример ниже показывает, как достигнуть этого, используя функции 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;
}
|