Стрелки клавиатуры - 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; }
Объяснение кода листинга программы
- В данном коде происходит обработка сообщений, которые приходят на окно (hWnd) от пользователя.
- Используется оператор switch для определения типа сообщения (uMsg).
- Если сообщение равно WM_KEYDOWN, то выполняется внутренняя проверка нажатой клавиши (wParam).
- В случае нажатия клавиши
вверх
(VK_UP) выполняется функция SetWindowPos, которая меняет положение окна, сдвигая его вверх на 5 пикселей. - В случае нажатия клавиши
вниз
(VK_DOWN) выполняется функция SetWindowPos, которая меняет положение окна, сдвигая его вниз на 5 пикселей. - В случае нажатия клавиши
влево
(VK_LEFT) выполняется функция SetWindowPos, которая меняет положение окна, сдвигая его влево на 5 пикселей. - В случае нажатия клавиши
вправо
(VK_RIGHT) выполняется функция SetWindowPos, которая меняет положение окна, сдвигая его вправо на 5 пикселей. - Если сообщение равно WM_CLOSE, то вызывается функция DestroyWindow, которая закрывает окно.
- Если сообщение равно WM_DESTROY, то вызывается функция PostQuitMessage, которая отправляет сообщение WM_QUIT.
- Если сообщение не соответствует ни одному из вышеописанных, то вызывается функция DefWindowProc для обработки стандартных сообщений.
- Возвращается 0, что означает успешное выполнение функции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д