Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 124
1

Как сделать выход по нажатию клавиш - из графического и консольного режима?

09.01.2016, 18:41. Просмотров 694. Ответов 7
Метки нет (Все метки)

Делаю программу, в которой есть меню и есть графики, которые могут выводиться в зависимости от меню.
Требуется сделать так, чтобы график загрывался по нажатию клавиши, например, 'q', и чтобы выход из программы осуществлялся по нажатию клавиши, например, ESC (код клавиши - 27).

Выскакивает Error message "Drawing operation was attempted when there was no current window".
При этом окно, если оно было закрыто, должно открываться по циклу снова...
Что может быть не так???

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
#include <iostream>
#include <graphics.h>
using namespace std;
 
int main()
{
    char q;
    do
    {
        cout << "To close graphic window - push ESC.\n\n";
 
        initwindow(640,480);
        while(1)
        {
            circle(320,240,150);
            if(kbhit()&&getch()=='q') closegraph(); //Выход из графического режима
        }
 
        cout << "To view circle again - push any key,\nTo out program - push ESC.\n\n";
 
     }while(kbhit()&&getch()==27);                  //Выход из программы
 
    return 0;
}
замена во вложенном цикле closegraph() на break или exit(0) не помогает (последний вариант, разумеется, вообще осуществляет завершение программы).
0
Миниатюры
Как сделать выход по нажатию клавиш - из графического и консольного режима?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2016, 18:41
Ответы с готовыми решениями:

Инициализация графического режима!
Кто может - помогите!!!! На экране сообщение: ...Device driver file not found...

Чтение данных из файла в таблицу графического режима
Здравствуйте! Назрел такой вопрос: как считать данные из уже созданного файла...

Нет инициализации графического режима в BorlandC++ под ДОС
Привет всем,проблема такая после относительно долгих вычислений стараюсь...

Выход по нажатию ESC
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; float sum();...

выход из графического режима
a 100 ;инициализация mov ah,00 ;графический...

7
Mesteriis
379 / 162 / 51
Регистрация: 08.08.2015
Сообщений: 1,148
Завершенные тесты: 1
09.01.2016, 19:03 2
Цитата Сообщение от xlxndr Посмотреть сообщение
while(kbhit()&&getch()==27
А зачем такие сложности не проще на форма сделать кнопку переключения режимов, и повесить на нее shortcat?
а дальше через сигналы и метод close();
и вообще
Цитата Сообщение от xlxndr Посмотреть сообщение
#include <graphics.h>
Брости вы эту погань и билдер, пишите на Qt
0
xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 124
09.01.2016, 19:04  [ТС] 3
Где сделать кнопку? В консольном окне? К сожалению, чтобы это сделать, боюсь еще придется переписать код консольного окна windows... да и данная программа вряд ли от этого упростится
Насчет QT - спасибо за совет... когда-то на нем и начинал... но вот обучение приходится проходить на CodeBlocks и Dev-Cpp
0
Mesteriis
379 / 162 / 51
Регистрация: 08.08.2015
Сообщений: 1,148
Завершенные тесты: 1
09.01.2016, 19:14 4

Не по теме:

xlxndr, А пардон, прочитал название название темы и подумал про GUI



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от xlxndr Посмотреть сообщение
но вот обучение приходится проходить на CodeBlocks и Dev-Cpp
Сочувствую.

0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 19:35 5
Dev-C++ не работает с графикой?
0
xlxndr
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 124
09.01.2016, 20:28  [ТС] 6
странный вопрос... если вы видели программу и читали тему, то должно быть понятно, что графика работает...

Добавлено через 6 минут
Странное дело... теперь решил освободиться от getch(), которая не хотела работать после срабатывания closegraph() !!!
Сделал так... Но теперь внешний цикл выполняется РОВНО 2 РАЗА! Потом программа закрывается не зависимо от вашего согласия...

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
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <graphics.h>
using namespace std;
 
int main()
{
    char q;
 
    while(1)
    {
        q = 'n';
        cout << "To close graphic window - push ESC.\n\n";
 
        initwindow(640,480);
        circle(320,240,150);
        while(1)
        if(kbhit()&&getch()==27) break;
        closegraph();
 
        cout << "To view circle again - input"y",\nTo out program - press Enter.\n\n";
 
        q = getchar();
        if(q!='y') break;
     }
 
    return 0;
}
0
Salah_Addin
5 / 5 / 1
Регистрация: 03.10.2014
Сообщений: 76
09.01.2016, 20:37 7
В таком случае, почему вам сочувствуют?
0
Mesteriis
379 / 162 / 51
Регистрация: 08.08.2015
Сообщений: 1,148
Завершенные тесты: 1
10.01.2016, 01:52 8
Salah_Addin, тут дело в другом! graphics вообще мерзкая библиотека и на сколько я помню две последние версии вообще не работают !
0
10.01.2016, 01:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2016, 01:52

Как сделать выход из программы по нажатию клавиши F9?
Привет всем! Подскажите пожалуйста, как сделать выход из программы по нажатию...

Как сделать выход из формы по нажатию Esc?
То есть как запустить функцию выхода по нажатию Esc в программе, срабатывающею...

Как сделать выход из цикла While при нажатии клавиш Tab
Как сделать выход из цикла While(25-35 строки) при нажатии клавиш Tab и...


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

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

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