Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Как реализовать цикл пока зажата опр. клавища?

Автор: Andrewshkovskii 17.12.2008 17:05

Собственно сабж. Как-то через kbhit() и цикл while?

Автор: volvo 17.12.2008 17:47

Цитата
Как-то через 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 17.12.2008 18:05

16-тиричные коды - коды клавиш ?

Автор: volvo 17.12.2008 19:58

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

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