Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка клавиатуры, помогите плиз 
:(
    Опции темы
Dexx
Дата 10.9.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 13.6.2005

Репутация: нет
Всего: 7



Как обработать нажатие кнопок на клаве в цикле

for (;;)
{


//case там и все дела


}


И при нажатии кнопки вызвать нужную процедуру!
Т.е. как узнать что нажата определенная кнопка
не важно скан код или аски! хоть что нибудь! smile 





--------------------

PM   Вверх
zkv
Дата 10.9.2007, 22:13 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



консоль?
вспоминается что-то типа kbhit() + getch() из conio.h - мануал поможет.
PM MAIL   Вверх
fullnull
Дата 10.9.2007, 22:26 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



Код


int getch(); //код нажатой клавиши
int kbhit(); //проверяет состояние клавиатуры на нажатие клавиши

enum Keys { //Коды клавиш
     KEY_UP=(0x48),
     KEY_DOWN=(0x50),
     KEY_LEFT=(0x4B),
     KEY_RIGHT=(0x4D),
     
     KEY_ENTER=(0x0D),
     KEY_ESCAPE=(0x1B),
     KEY_SPACE=(0x20),
     KEY_TAB=(0x09),
     KEY_BACK=(0x08),
     KEY_DELETE=(0x53),
     
     KEY_HOME=(0x47),
     KEY_END=(0x4F),
     KEY_PAGE_UP=(0x49),
     KEY_PAGE_DOWN=(0x51),
     KEY_INSERT=(0x52),
     
     KEY_TILDE=(0x60),
     
     KEY_F1=(0x3B),
     KEY_F2=(0x3C),
     KEY_F3=(0x3D),
     KEY_F4=(0x3E),
     KEY_F5=(0x3F),
     KEY_F6=(0x40),
     KEY_F7=(0x41),
     KEY_F8=(0x42),
     KEY_F9=(0x43),
     KEY_F10=(0x44),
     KEY_F11=(0x85),
     KEY_F12=(0x86),
     
     KEY_NULL=0
};



Или еще если неизвестно, нажата клавиша или нет:


Код

int getKey(int time) //Ожидает нажатия клавиши время time, после чего возвращает управление
{
      for(int x=0; x<time; x++){
             if( kbhit() )
                    return getch();
     }
     return NULL;
}

PM MAIL   Вверх
georain
Дата 28.2.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



А (как||можно) сделать чтобы в ожидании
Код

 int kbhit();

поток засыпал?

Это сообщение отредактировал(а) georain - 28.2.2008, 16:14
PM MAIL   Вверх
georain
Дата 28.2.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Думал, создавать ли новую тему, всё-же решил тут написать.

Как написать кроссплатформенное консольное приложение которое одновременно выводит информацию на экран и считывает ввод с клавиатуры, можно в одном, можно в разных потоках, но ввод и вывод не связан. Т.е. информация на экран выводится по таймеру, но в любой момент можно ввести команду. Отображать введённые символы очень желательно.
Я пока только додумался сделать в трёх потоках, один отображает блокируясь по таймеру, второй принимает буферизованный ввод блокируясь на cin, а третий всем этим управляет. Отображение сделал на cout'ах, поэтому введённые буквы затираются, да и честно говоря не уверен как на винде это будет выглядеть, пишу на линуксе. В общем товарищи, подскажите как это сделать правильно.

Добавлено @ 16:59
А
Код

conio.h

это стандартный файл c++? Это вроде только под виндовс.

Это сообщение отредактировал(а) georain - 28.2.2008, 17:07
PM MAIL   Вверх
georain
Дата 28.2.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Есть вообще библиотеки по работе с вводом - выводом в консоль?
PM MAIL   Вверх
Alek86
Дата 28.2.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(georain @  28.2.2008,  16:45 Найти цитируемый пост)
это стандартный файл c++? Это вроде только под виндовс.

конечно
С++ знать не знает ни о каких устройствах, тем более ввода-вывода


кстати и правда, есть ли библиотеки типа boost::filesystem, только для обработки нажатий клавиш и т.п.?


--------------------
user posted image    user posted image
PM MAIL   Вверх
Mayk
Дата 28.2.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(georain @  28.2.2008,  21:05 Найти цитируемый пост)
Есть вообще библиотеки по работе с вводом - выводом в консоль? 

Цитата(Alek86 @  28.2.2008,  21:35 Найти цитируемый пост)
кстати и правда, есть ли библиотеки типа boost::filesystem, только для обработки нажатий клавиш и т.п.? 

curses есть и под юнихи и вроде под винду(например, pdcurses). SLang есть под юникс, про винду не знаю -- не интересовался.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
georain
Дата 28.2.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(Alek86 @  28.2.2008,  17:35 Найти цитируемый пост)
конечно
С++ знать не знает ни о каких устройствах, тем более ввода-вывода

Чёт я у себя его не нашёл


Цитата(Mayk @  28.2.2008,  18:02 Найти цитируемый пост)
curses есть и под юнихи и вроде под винду(например, pdcurses). SLang есть под юникс, про винду не знаю -- не интересовался.

Интересуют именно кросплатформенные библиотеки.
PM MAIL   Вверх
Alek86
Дата 28.2.2008, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(georain @  28.2.2008,  18:53 Найти цитируемый пост)
Чёт я у себя его не нашёл

устройства ввода-вывода? )

клавиатура является одним из таких устройств...
и С++ о ней знать не знает
так что и стандартных файлов для ее порддержки быть не может


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 28.2.2008, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(georain @  28.2.2008,  19:53 Найти цитируемый пост)
Чёт я у себя его не нашёл

это борландовский хидер, вроде в версиях старше 3.1 conio.h вообще нет..


--------------------
Мой блог
PM MAIL WWW   Вверх
georain
Дата 29.2.2008, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



А есть кроссплатформ библиотека для перехвата нажатий на клавиши, что-то типа небуферизованного ввода?
PM MAIL   Вверх
Mayk
Дата 29.2.2008, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(georain @  28.2.2008,  22:53 Найти цитируемый пост)
Интересуют именно кросплатформенные библиотеки. 

Read the fucking manual.
Цитата

PDCurses is a public domain curses library for DOS, 
OS/2, Win32, X11 and SDL, implementing most of the functions available 
in X/Open and System V R4 curses. It supports many compilers for these 
platforms. The X11 port lets you recompile existing text-mode curses 
programs to produce native X11 applications.



Это сообщение отредактировал(а) Mayk - 29.2.2008, 06:22


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
georain
Дата 29.2.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(Mayk @  29.2.2008,  06:21 Найти цитируемый пост)
PDCurses

Это ответ на все вопросы в данном топике, спасибо!
PM MAIL   Вверх
DIHOST
Дата 4.3.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.6.2006

Репутация: нет
Всего: нет



Мегасофтина - консольный пробник клавы... хотя надо-бы наизусть знать таблицу.
Код

#pragma hdrstop
#include <iostream.h>
#include <conio.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
   int a;
   do
   {
   a = getch();
   cout << a << endl;
   }
   while (a != 3);   // выход из цикла и завершение работы мегасофтины при нажатии Ctrl+С
   return 0;
}


Это сообщение отредактировал(а) DIHOST - 4.3.2008, 20:19
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.