1. Уважаемые участники и гости, 19 октября codeby будет работать в режиме "Только чтение". Регистрация новых участников будет закрыта. 20 октября портал продолжит работу в прежнем режиме.

Кнопки с клавиатуры

Тема в разделе "Общие вопросы по С и С++", создана пользователем Folderx, 20 авг 2007.

  1. Folderx

    Folderx Гость

    Репутация:
    0
    Как кнопки с клавиатуры обрабатывать, такие как F1 там стрелки влево вправо вверх вниз, юзаю функцию getchar(), так там на всех эти кнопки код 27 возвращается, видимо из-за того что они составные типа ^[[A
     
  2. mms

    mms Гость

    Репутация:
    0
    Код:
    int keyCode = _getch();
    if (keyCode == 0 || keyCode == 0xE0);
    {
    int sysKeyCode = _getch();
    }
    Если первый вызов _getch вернул 0 или 0xE0 значит нажали системную кнопку и надо вызвать еще раз эту функцию для получения кода системной клавиши.
     
  3. Folderx

    Folderx Гость

    Репутация:
    0
    У меня вместо getch() вот такая штука, которую я сам через интернет собирал по частям, эта штука ожидает нажатия клавиши и возвращает значение. Ну типа вроде тот же getch().

    Код:
     
    
    #include <termios.h>
    
    char my_getch()
    {
    struct termios ekran; 
    tcflag_t parametri;
    tcgetattr(0, &ekran); 
    parametri = ekran.c_lflag; 
    ekran.c_lflag &= ~(ICANON | ECHO);
    tcsetattr(0, TCSANOW, &ekran);
    
    int vvod;
    do 
    vvod = fgetc(stdin);
    while (EOF == vvod);
    
    // Восстановление значений, которые были изменены в начале.
    tcgetattr(0, &ekran); 
    ekran.c_lflag = parametri; 
    tcsetattr(0, TCSANOW, &ekran); 
    
    return vvod;
    }
    Так вот там на любую клавишу, будь то F1, серая стрелка какая-нибудь, ESC, возвращает код 27, на Enter возвращает код 10.
    Функция getchar() то же самое возвращает, а на клавиши шифт контрол алт даже не реагирует, как будто не было нажатия.
     
  4. Folderx

    Folderx Гость

    Репутация:
    0
    Всё въехал, там оказывается по три символа на каждую стрелку
    27 91 65
    27 91 66
    27 91 67
    27 91 68

    Кнопки F.. тоже получил спасибо.
     
  5. Гость

    Репутация:
    0
    termios.h- а что это за header файл????? а принцип работы первой проги не пойму? какое условие вывода на экран сделать?
     
  6. gamecreator

    gamecreator Гость

    Репутация:
    0
    тебе нужен код
    Код:
    int keyCode = _getch();
    keyCode = _getch();
    if (keyCode == 0 || keyCode == 0xE0);
    {
    int sysKeyCode = _getch();
    //..........
    }
    там где закоментена строка из точек пишешь код отображения sysKeyCode, например cout<<sysKeyCode<<endl; и с помощью него определяешь код нужной тебе клавиши (там у тебя ескейп вроде), потом в проге делаешь проверку на эту клавишу, и если она нажата, то выходишь из бесконечного цикла(в который тебе нужно вставить код с условием проверки на клавишу) чтения текста.
     
  7. Folderx

    Folderx Гость

    Репутация:
    0
    Там короче был прикол когда ESC равнялся RightArrow, то есть когда нажималась какая-нибудь из стрелок срабатывало событие как будто нажат ESC, короче я стал считывать в массив три значения и только потом проверять их поочерёдно, так разделил ESC и RightArrow

    Это короче когда в линуксе будешь сидеть там нету функции getch(), вот этот термиос управляет терминалом блокирует его и ждёт клавиш, если клавиша нажата разблокирует обратно.
     
Загрузка...

Поделиться этой страницей