WinPro logo. Перейти на сайт www.winpro.narod.ru

Пример управления курсором с клавиатуры



В примере показано перемещение курсора при помощи клавиш со стрелками.
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; 
 
} 
Hosted by uCoz