2013-06-06 23 views
-5

Я хочу написать функцию, в которой при нажатии «esc» окно должно закрываться, дело в том, что функция должна быть записана в c. Я новичок в программировании с помощью любой помощи.Как закрыть окно, нажав «esc» в c?

+0

C не имеет окон, или ключи. –

+3

Это помогло бы плакатам, если бы вы могли дать больше информации о том, что вы делаете - какие ОС, рамки и т. Д. Кроме того, люди здесь ценят это, если человек, задающий вопрос, по крайней мере, должен решить проблему. Сделайте некоторые исследования самостоятельно, попробуйте что-нибудь, и если вы все еще застряли, вставьте код здесь. Люди будут рады помочь. – Nobilis

+0

Пожалуйста, разместите свою ОС - как это делается в Windows и UNIX/Linux значительно отличается. И поскольку @KerrekSB сказал, что на самом деле нет «ключей» в C. –

ответ

-1

Нет стандартного способа немедленного реагирования на вход в C - клавиша ESC ничем не отличается от буквы «A» или «x» в этом отношении - вход не передается программе, пока пользователь не нажмет Enter , Иногда еще одно осложнение заключается в том, что ESC используется для особых целей, например, приложение командной строки Windows использует ESC для «стирания, все, что я набрал до сих пор», что делает невозможным чтение даже с помощью «ESC + Enter».

Таким образом, вам необходимо использовать системные функции, которые могут считывать «сырые» данные с клавиатуры, а не обычные «приготовленные» данные, которые вы используете с помощью стандартных функций ввода-вывода (например, getchar()).

Существуют независимые от ОС параметры, такие как ncurses, которые поставляются для консольных приложений. В Windows вы можете использовать getch() после включения conio.h, но это нестандартная библиотека, и она работает только в консольном приложении.

В оконной среде это случай ответа на событие клавиатуры, а «if key == ESCAPE close_window» - именно то, как вы это делаете, зависит от используемой системы окон и используемой структуры.

+0

Я второй downvote. Мое объяснение в том, что ваш ответ ужасен. ESC - это значение ASCII 27. Когда вы используете '' 'getchar()' '', это будет значение 27 десятичных знаков, которое вы ищете. Это вряд ли получится проще. Проблема в том, что вы создаете материал, который кажется более сложным, чем на самом деле, несколько стереотипным результатом. Кажется, вы думаете, что Esc - это специальная клавиша клавиатуры, а не код символа ASCII. Esc больше не является чем-то особенным, чем M. –

+0

@HeathHunnicutt: На самом деле вы думаете, что исходный плакат означает «ESC + enter» или «нажмите« ESC ». Насколько я могу судить, последнее не возможно со стандартным C. Первое возможно - предполагая, что ESC не «израсходован» самой обработкой ввода клавиатуры, что имеет тенденцию иметь место в Windows, поскольку это означает «Стереть всю строку» - и, таким образом, нажатие ESC в коде командной строки Windows не работает. Но я буду перефразировать ответ, чтобы более точно описать сценарий, который «невозможен» для вашей выгоды. –

+0

OP даже не указывает, какую ОС. Если вы хотите принять буферизацию строк, это вы. Если вы предполагаете буферизацию строк, вы можете также упомянуть stty(), очевидное решение вашей концепции «невозможно». Что касается поведения Windows, вы, кажется, вызываете FUD. –

2

Ну, для Windows:

GetActiveWindow или GetFocus, чтобы получить окно, в центре внимания.
GetASyncKeyState, чтобы захватить кнопку выхода.
SendMessage закрыть соответствующее окно.

Если вы хотите что-то любитель, чем GetAsyncKeyState (который не является надежным и дорогим процессором в бесконечном цикле), вы можете сделать что-то относительно сложный на первый взгляд: global keyboard hooks in c

0
void myfunc(){ 
    char ch; 
    do{ 
     //do what you want here 
     ch=getchar(); 
    }while(ch!='27'); //27 is the ascii code for esc 
} 
+0

Что делать, если моя система не использует ASCII и использует вместо нее EBCDIC? – user93353

Смежные вопросы