Win32 API. Курсоры Страница 12. Использование клавиатуры для перемещения курсора
|
Страница 12 из 28
Использование клавиатуры для перемещения курсора Поскольку 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; }
|