Win32 API. Курсоры
Страница 12. Использование клавиатуры для перемещения курсора


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

Поскольку 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;
}

 
« Предыдущая статья   Следующая статья »