Помощь - Поиск - Пользователи - Календарь
Полная версия: Как реализовать цикл пока зажата опр. клавища?
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Andrewshkovskii
Собственно сабж. Как-то через kbhit() и цикл while?
volvo
Цитата
Как-то через kbhit() и цикл while?
Сомневаюсь, ты не сможешь точно распознать, когда клавиша отпущена, поскольку заполняется буфер, и по крайней мере надо будет ждать, пока буфер не освободится... А если он переполнится? Оно тебе надо? Я бы, например, делал через WinAPI функции:

#include <windows.h>
#include <iostream>

int main() {
do {
std::cout << "not pressed" << std::endl;
Sleep(20);
} while((::GetKeyState(VK_SPACE) & 0xFF00) == 0x0000);

do {
std::cout << "pressed" << std::endl;
Sleep(20);
} while((::GetKeyState(VK_SPACE) & 0xFF00) == 0xFF00);

// Здесь чистишь буфер
std::cout << "go!" << std::endl;
return 0;
}

Andrewshkovskii
16-тиричные коды - коды клавиш ?
volvo
Нет, признаки нажатия/отпускания... Если GetKeyState() & 0xFF00 равно нулю (т.е., если старший байт результата == 0) значит клавиша отпущена, иначе - нажата...

Поэтому при нажатии пробела первый цикл прекращается (GetKeyState() & 0xFF00 != 0), а при ее отпускании - прекращается второй цикл, результат AND-а опять нулевой...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.