Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
#1

Нажатие определенной клавиши на клавиатуре = Запуск определенной функции - C++

16.05.2014, 09:03. Просмотров 1147. Ответов 15
Метки нет (Все метки)

Здравствуйте.
У меня такой вопрос: как при нажатии, к примеру, клавиши "1" на клавиатуре запустить нужную мне функцию (Окно с меню работает в графическом режиме.) ?

Вот код меню:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int main ()
{ int menu1;
char d = '\0';
do
{
initwindow (800, 600);
settextstyle (0, 0, 32); //0 0 4
setcolor (3);
outtextxy (250, 100, "ÐÀÑÏÈÑÀÍÈÅ");
setcolor (10);
setlinestyle (0, 0, 5);
circle (175, 185, 30);
outtextxy (160, 170, "1");
outtextxy (220, 170, "Ââîä Г¤Г*Г*Г*ûõ");
setcolor (2);
circle (175, 250, 30);
outtextxy (159, 235, "2");
outtextxy (220, 235, "ÑïðГ*ГўГЄГ*");
circle (175, 315, 30);
outtextxy (159, 300, "3");
outtextxy (220, 300, "Âûõîä!");
getch ();
if (d=='3') break;
fflush(stdin);
scanf ("%d", &menu1);
switch (menu1)
{ case 1: input (); break;
  case 2: inf (); break;
}
}
while (menu1!=3);
closegraph ();
}
Подскажите, пожалуйста. Заранее огромное спасибо!

Добавлено через 1 минуту
На данный момент при запуске программы у меня выходят два окна: графическое с меню и текстовое для ввода. Так вот, нужно, чтобы текстового окна не было, а было лишь окно с меню.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 09:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нажатие определенной клавиши на клавиатуре = Запуск определенной функции (C++):

Как в элементе управления CListCtrl поймать нажатие определенной клавиши на элементе? - C++
Поймать нажатие клавиши вообще - несложно: BOOL CSysbackupDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { ...

Выход из цикла по нажатию определенной клавиши - C++
Допустим у меня есть какой-нибудь while(1) и мне нужно, чтобы при нажатии, например, esc или enter цикл завершался, как такое сделать? ...

Вывод цвета при нажатии определенной клавиши - C++
Введите символ и введите на печать соответствующий ему цвет. Например, символу "г" соответствует "голубой цвет". Если такого символа нет,...

Выход из цикла после нажатия определенной клавиши - C++
Здравствуйте, собственно, хотел узнать, как мне выйти из цикла, нажав определенную клавишу? Обычный цикл по заполнению массива

Воспроизведение звука системным динамиком при нажатии определенной клавиши - C++
Добрый вечер! Кто знает как сделать, чтоб при нажатии клавиши "." срабатывал Beep (600,400), а при нажатии "-" Beep(600,900), например...

Запрет нажатия определенной клавиши в консольном приложении (Visual Studio) W8 - C++
Здравствуйте, мне нужно, что бы при нажатии сочетания клавиш(L. Shift+ L. Ctrl + F1) сделать нерабочей клавишу "1", а при повторном нажатии...

15
TenGen
Будущее рядом
98 / 96 / 20
Регистрация: 06.03.2014
Сообщений: 342
16.05.2014, 09:55 #2
Argentum21, это вам нужно, насколько я понял, сделать обработчик события нажатия клавиш на клавиатуре. Что бы при нажатии клавиши он срабатывал, определял, какая именно клавиша нажата, и вызывал определенную функцию. Через if'ы
0
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 10:30  [ТС] #3
Не могли бы Вы показать пример на моей программе?
0
Mikhail1990
17 / 17 / 3
Регистрация: 22.03.2014
Сообщений: 218
16.05.2014, 11:49 #4
Вот этот кусочек поможет вам
вставить вместо ввода (cin) или что там у вас
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int key=0;                            //переменная для хранения ввода  с клавиатуры
    
    if(_kbhit())                 //проверяет нажата ли клавиша
    {
        key=_getch();              //просит нажать клавишу
 
        switch (key)                 //дальше идет проверка, код 49-52 это 1-4 клавиши на клавиатуре
        {
        case 49:                        // то вызываем
            ФУНКЦИЯ ТАКАЯ;
            break;
        case 50:                        // то вызываем
            ФУНКЦИЯ ТАКАЯ;
            break;
        case 51:                        // то вызываем
            ФУНКЦИЯ ТАКАЯ;
            break;
        case 52:                        // то вызываем
            ФУНКЦИЯ ТАКАЯ;
            break;
        }
    }
0
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 17:25  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
int main ()
{  
    int key;
     int menu1;
char d = '\0';
do
{
initwindow (800, 600);
settextstyle (0, 0, 32); //0 0 4
setcolor (3);
outtextxy (250, 100, "Raspisanie");
setcolor (10);
setlinestyle (0, 0, 5);
circle (175, 185, 30);
outtextxy (160, 170, "1");
outtextxy (220, 170, "Vvod dannyh");
setcolor (2);
circle (175, 250, 30);
outtextxy (159, 235, "2");
outtextxy (220, 235, "Spravka");
circle (175, 315, 30);
outtextxy (159, 300, "3");
outtextxy (220, 300, "Exit!");
getch ();
if (d=='3') break;
fflush(stdin);
 
if (_kbhit())
      {
                   key=_getch();
                   switch (key)
                   {
                          case 49:
                               input (); break;
                          case 50:
                               inf (); break;
                   }
                   }  
}                     
while (menu1!=3);
closegraph ();
}
Я переделала, но все равно не работает так как нужно...
0
TenGen
Будущее рядом
98 / 96 / 20
Регистрация: 06.03.2014
Сообщений: 342
16.05.2014, 17:27 #6
Argentum21, а что не так?
0
Mikhail1990
17 / 17 / 3
Регистрация: 22.03.2014
Сообщений: 218
16.05.2014, 17:31 #7
я так понял оно проскакивает не дожидаясь ввода? верно?
0
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 17:32  [ТС] #8
Mikhail1990, При нажатии на клавишу , к примеру, 1, окно просто закрывается
0
Mikhail1990
17 / 17 / 3
Регистрация: 22.03.2014
Сообщений: 218
16.05.2014, 17:35 #9
было бы хорошо весь код посмотреть!
0
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 17:36  [ТС] #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include <stdio.h>
#include <conio.h> 
#include <string.h>
#include <math.h>
#include <dos.h>
#include <graphics.h>
 
 
struct diciplina
{
       char name_predmet[20];
       int lec, sem, lab;
};
 
 
struct prepodavatel 
{
       diciplina predmet;
       char FIO[25];
};
       
 
struct auditoria
{
       int nomer_audit[2];
       int id[3]; //èäåГ*ГІГЁГґГЁГЄГ*òîð: 0 - ëåêöèÿ, 1- ñåìèГ*Г*Г°, 3- Г«Г*áîðГ*òîðГ*Г*Гї
};
 
struct group
{
       int n_gr;
       int n_podgruppy; //max - 2 podgruppy: 1 and 2
};                    
 
 
 
void input ()
{
     diciplina dic;
     prepodavatel pr;
     auditoria audit;
     group gr;
char filename[100];
int vsego_audit=0;
printf ("\nViberite deystvie\n");
printf ("\n1). Sozdat` file\n");
printf ("\n2). Otkrit` file\n");
fflush (stdin);
char d=getche ();
FILE *F;
if (d=='1')
{
printf ("\nVvedite imya dlya novogo faila\n");
gets (filename);
F=fopen (filename, "wb+");
}
if (d=='2')
{
printf ("\nVvedite imya faila\n");
gets (filename);
F=fopen (filename, "rb+");
if (F)
printf ("\nFile sushestvuet!\n");
else
{ printf ("File ne sushestvuet!\n");
printf ("\nViberite deistvye:\n");
printf ("\n1). Sozdat file\n");
printf ("\n2). Vyhod!\n");
d=getche ();
if (d=='1')
{
printf ("\nVvedite imya dlya novogo faila\n");
gets (filename);
F=fopen (filename, "wb+");
}
if (d=='2')
return;
}
}
{
do
{ fflush (stdin);
printf ("\nVyberute deistvie: \n");
printf ("\n1). Dobavit dannye\n");
printf ("\n2). Posmotret` dannye\n");
printf ("\n3). Sozdat file zanovo \n");
printf ("\n4). Vyhod!");
d=getche ();
if (d=='4') break;
if (d=='3')
{
printf ("\nVvedite imy dly novogo faila\n");
gets (filename);
F=fopen (filename, "wb+");
}
if (d=='1')
{
F=fopen (filename, "ab+");
do
 { fflush (stdin);
  printf ("Vvedite FIO prepodavatelya, provod. zanyatiye: \n");
  gets (pr.FIO);
  printf ("\n Vvedite naim.discipliny: \n");
  gets (dic.name_predmet);
  printf ("\n Vvedite kol-vo lekciy po etoy discipline: \n");
  scanf ("%d", &dic.lec);
  printf ("Vvedite kol-vo seminar. zanyatiy po etoy discipline: \n");
  scanf ("%d",&dic.sem);
  printf ("Vvedite kol-vo lab.rabot po etoy discipline: \n");
  scanf ("%d", &dic.lab);
  printf ("Vvedite nomera vozmozhnyh auditoriy dlya dannogo zanyatiya: \n");
  for (int i=0; i<2; i++)
  scanf ("%d", &audit.nomer_audit[i]);
  fwrite (&pr, sizeof(pr), 1, F);
  fwrite (&audit, sizeof(audit), 1, F);
  fwrite (&dic,sizeof(dic), 1, F);
  printf ("\nProdolzat' vvod: [D/H]\n");
  fflush (stdin);
  d=getche ();
 }
 while (d=='D' || d=='d');
 fclose (F);
}
}
while (d!=1 || d!=2 || d!=3);
}
}
 
 
 
 
 
 
void inf ()
{    initwindow (800, 600);
     setcolor (4);
     outtextxy (0, 0, "Nazvanie programmy: Raspisanie zanyatiy. Chtoby posmotret optimalnoe raspisanie, nazhmite 1.");
}     
      
 
int main ()
{  
    int key;
     int menu1;
char d = '\0';
do
{
initwindow (800, 600);
settextstyle (0, 0, 32); //0 0 4
setcolor (3);
outtextxy (250, 100, "Raspisanie");
setcolor (10);
setlinestyle (0, 0, 5);
circle (175, 185, 30);
outtextxy (160, 170, "1");
outtextxy (220, 170, "Vvod dannyh");
setcolor (2);
circle (175, 250, 30);
outtextxy (159, 235, "2");
outtextxy (220, 235, "Spravka");
circle (175, 315, 30);
outtextxy (159, 300, "3");
outtextxy (220, 300, "Exit!");
getch ();
if (d=='3') break;
fflush(stdin);
 
if (_kbhit())
      {
                   key=_getch();
                   switch (key)
                   {
                          case 49:
                               input (); break;
                          case 50:
                               inf (); break;
                   }
                   }  
}                     
while (menu1!=3);
closegraph ();
}
0
Mikhail1990
17 / 17 / 3
Регистрация: 22.03.2014
Сообщений: 218
16.05.2014, 17:49 #11
поменяйте if (!kbhit())
0
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 18:07  [ТС] #12
Mikhail1990, Теперь он совсем не реагирует на нажатие клавиш. Никаких
0
Mikhail1990
17 / 17 / 3
Регистрация: 22.03.2014
Сообщений: 218
16.05.2014, 18:11 #13
если оставить вот так
C++
1
2
3
4
5
6
7
8
9
key=_getch();
                   switch (key)
                   {
                          case 49:
                               input (); break;
                          case 50:
                               inf (); break;
                   }
                   }
0
Argentum21
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 75
16.05.2014, 18:14  [ТС] #14
Mikhail1990, Нет, это ничего не меняет.
По-прежнему выскакивают два окна и работает как и ранее было - только когда нужные цифры в окне для текста пишу.
Но нужно, чтобы при запуске было всего одно окно - то, что с графикой и, нажимая на клавишу клавиатуры, запускалось действие, описанное в функции...
0
Mikhail1990
17 / 17 / 3
Регистрация: 22.03.2014
Сообщений: 218
16.05.2014, 18:17 #15
Первоначальная проблема была с автовводом.
Соррян, по окнам ничего не могу подсказать.
0
16.05.2014, 18:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2014, 18:17
Привет! Вот еще темы с ответами:

Возврат программы в исходное состояние при нажатии определенной клавиши - C++
Написал код,теперь нужно что бы программа после нажатия определенной кнопки возвращала к началу! Вот код на всякий случай! int...

Запуск программ по определенной схеме с использованием Fiber и Thread - C++
Необходимо выполнить запуск программ калькулятора (сalc.exe), Графического редактора Paint (mspaint.exe), блокнота (notepad.exe) по такой...

Посещение потоком определенной функции - C++
Можно ли как то узнать, какие именно потоки прошли через заданную функцию? студия 2012.

Вызов функции с определенной частотой - C++
Всем привет, бьюсь над задачей: необходимо вызывать функцию с определенной частотой например 30КГц. Кто сталкивался с подобной задачей?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru