Стрелки клавиатуры - C (СИ)

Узнай цену своей работы

Формулировка задачи:

всем привет. как программу под виндой заставить реагировать на нажатие стрелки. я что-то слышал про winAPI. это имеет отношение к делу. заранее спасибо. З.Ы. желательно подробное описание с коментариями.

Решение задачи: «Стрелки клавиатуры»

textual
Листинг программы
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    //кейс сообщений
    switch(uMsg)
    {
    //обработка сообщений нажатия клавиш клавиатуры
    case WM_KEYDOWN:
        switch(wParam)
        {
        //вверх
        case VK_UP:
            //функция меняет положение окна и несёт ознакомительный смысл
            SetWindowPos(hWnd, NULL, 5, 5, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
            break;
        //вниз
        case VK_DOWN:
            SetWindowPos(hWnd, NULL, 50, 5, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
            break;
        //влево
        case VK_LEFT:
            SetWindowPos(hWnd, NULL, 5, 50, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
            break;
        //вправо
        case VK_RIGHT:
            SetWindowPos(hWnd, NULL, 100, 100, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
        }
        break;
    
    //в случае закрытия формы
    case WM_CLOSE:
        DestroyWindow(hWnd);    //передаём дескриптор окна функции разрушения формы
        break;
    
    //в случае разрушения формы
    case WM_DESTROY:
        PostQuitMessage(0);     //отправляем сообщение WM_QUIT
        break;
    
    //в остальных случаях
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
 
    return 0;
}

Объяснение кода листинга программы

  1. В данном коде происходит обработка сообщений, которые приходят на окно (hWnd) от пользователя.
  2. Используется оператор switch для определения типа сообщения (uMsg).
  3. Если сообщение равно WM_KEYDOWN, то выполняется внутренняя проверка нажатой клавиши (wParam).
  4. В случае нажатия клавиши вверх (VK_UP) выполняется функция SetWindowPos, которая меняет положение окна, сдвигая его вверх на 5 пикселей.
  5. В случае нажатия клавиши вниз (VK_DOWN) выполняется функция SetWindowPos, которая меняет положение окна, сдвигая его вниз на 5 пикселей.
  6. В случае нажатия клавиши влево (VK_LEFT) выполняется функция SetWindowPos, которая меняет положение окна, сдвигая его влево на 5 пикселей.
  7. В случае нажатия клавиши вправо (VK_RIGHT) выполняется функция SetWindowPos, которая меняет положение окна, сдвигая его вправо на 5 пикселей.
  8. Если сообщение равно WM_CLOSE, то вызывается функция DestroyWindow, которая закрывает окно.
  9. Если сообщение равно WM_DESTROY, то вызывается функция PostQuitMessage, которая отправляет сообщение WM_QUIT.
  10. Если сообщение не соответствует ни одному из вышеописанных, то вызывается функция DefWindowProc для обработки стандартных сообщений.
  11. Возвращается 0, что означает успешное выполнение функции.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы