Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/403: Рейтинг темы: голосов - 403, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 42
1

Перемещение курсора в консоли

13.05.2010, 10:18. Показов 76664. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите реализовать новичку перемещение курсора в консоли.Т.е. есть меню например
Создать базу
Редактировать
Удалить
И нужно передвигатся по нему курсором
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2010, 10:18
Ответы с готовыми решениями:

Перемещение курсора в консоли
Работаю над матричным калькулятором в консоли. Для оформления ввода матрицы надо, чтобы после ввода...

Перемещение позиции курсора в консоли
Приветы форумчанам, вопрос такой. Нужно переместить позицию курсора на произвольную позицию в...

Перемещение курсора
Мне нужно сделать что-то типа интерфейса на консоли.Как задавать координаты курсора на консоли в...

Перемещение курсора
Подскажите как передвинуть курсор в любую точку экрана по координатам x и y. Или каким нибуд другим...

27
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 41
13.05.2010, 13:15 2
как по мне легче тогда уже в вин апи это сделать.
0
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
03.08.2010, 19:47 3
mind66, вопрос читал? в чем смысл твоего ответа?

А вообще, та же ситуация. Собственно, вопрос:
Как можно переместить курсор в начало меню? А потом просто при нажатии курсорных стрелок выделять строку, в смысле, видоизменять ее и отлавливать подтверждение.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
03.08.2010, 20:25 4
qpMM, а смысл в том, что не стоит так извращаться над консолью, ведь можно написать приложение на WinAPI и будет все намного проще и удобнее
0
113 / 113 / 28
Регистрация: 05.07.2009
Сообщений: 225
03.08.2010, 20:35 5
xGravity, qpMM,

C++
1
2
3
4
5
#include <windows.h>
 
COORD position = {0,0}; //позиция x и y
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsole, position);
2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
04.08.2010, 01:37 6
xGravity, если уж совсем новичёк - так сделайте проще
1 - Создать базу
2 - Редактировать
3 - Удалить
...
или обязательно с консольными "красивостями"? Если уж совсем серьёзно всё делать - так это нормальный графический интерфейс нужен. Самый быстрый путь по-моему C#. А если для личного пользования - так и с текстовым меню жить вполне можно...
0
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
04.08.2010, 07:37 7
M128K145, я пока изучаю консольное программирование на С++, видно в какой раздел пишу?
Ясен пень, это все будет легче сделать с GUI, но мне пока туда рано соваться.
Vladimir616, спасибо большое, попробую.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
04.08.2010, 09:02 8
qpMM, я тоже когда-то изучал "консольное программирования", но когда возникла необходимость я самостоятельно начал знакомится с MFC.
Я ни на чем не настаиваю, я просто объяснил смысл поста mind66
0
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
04.08.2010, 13:30 9
Ну пока я должным образом не ознакомлюсь с консолью, на графику переходить не хочу. Да и это довольно интересно выделывать какие-либо вещи, не характерные для нее (консоли). Полученные знания все равно пригодятся, а голову поломать над реализацией одно только удовольствие
0
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
04.08.2010, 17:57 10
qpMM, тебе поможет эта темка использование клавиш
там нужно дописать конструкцию свитч которая будет позволять бегать по менюшке.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.08.2010, 18:12 11
Лучший ответ Сообщение было отмечено как решение

Решение

Вот простейший пример:

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 <conio.h>
#include <windows.h>
 
int main()
{
        int x=0, y=0;
        int step=10;
        char c;
 
        SetCursorPos(x, y);
        do {
                c=getch();
                switch(c){
                        case 75: SetCursorPos(x-=step, y); break;
                        case 77: SetCursorPos(x+=step, y); break;
                        case 72: SetCursorPos(x, y-=step); break;
                        case 80: SetCursorPos(x, y+=step); break;
                }
        } while(c != 27); // Esc
 
        system("pause");
        return 0;
}
5
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
04.08.2010, 18:39 12
neske, все бы хорошо, только перемещается не курсор консоли, а курсор мыши...
2
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.08.2010, 20:39 13
Ах да, точно.
А то я увидел "курсор", и даже не задумывался ))
0
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
04.08.2010, 21:59 14
Mur3ik, это все ясно, но кнопки-стрелки таким методом не ловятся. По крайней мере у меня. Переменная просто принимает значение 0. Я немного погуглил и теперь так делаю:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <conio>
#include <windows>
 
using namespace std;
 
int main() {
  int i;
  getch();
  i=(GetKeyState(VK_UP) & 0x100); // 256 - если нажата, 0 - если нет. 
  if (i) //действие;
Вроде работает. Вместо VK_UP можно подставить и другие, поменяв направление (VK_LEFT, например)

Добавлено через 2 минуты
Опа, пока писал, тему почистили..лан, будем пробовать

Добавлено через 12 минут
C++
1
2
3
4
case 75: SetCursorPos(x-=step, y); break;
case 77: SetCursorPos(x+=step, y); break;
case 72: SetCursorPos(x, y-=step); break;
case 80: SetCursorPos(x, y+=step); break;
у меня получались такие значения, но при простейшей проверке
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <conio>
 
using namespace std;
 
int main()
{
 char ch;
 ch=getch();
 if (ch==75) cout << "Left";
 return 0;
}
оказывалось, что не срабатывает.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.08.2010, 22:23 15
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 <conio.h>
#include <windows.h>
 
int main()
{
        int x=0, y=0;
        int step=10;
        char c;
 
        SetCursorPos(x, y);
        do {
                c=getch();
                switch(c){
                        case 75: SetCursorPos(x-=step, y); std::cout << "LEFT.\n"; break;
                        case 77: SetCursorPos(x+=step, y); std::cout << "RIGHT.\n"; break;
                        case 72: SetCursorPos(x, y-=step); std::cout << "UP.\n"; break;
                        case 80: SetCursorPos(x, y+=step); std::cout << "DOWN.\n"; break;
                }
        } while(c != 27); // Esc
 
        system("pause");
        return 0;
}
Миниатюры
Перемещение курсора в консоли  
1
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
04.08.2010, 22:33 16
Пардон, а почему тогда у меня не получалось? О_о Тот же мой последний код.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.08.2010, 22:37 17
А вы попробуйте завести цикл
0
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
04.08.2010, 23:08 18
А что изменяется, если я проверяю только одно условие?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
04.08.2010, 23:18 19
qpMM, переменная c изменяется
0
113 / 113 / 28
Регистрация: 05.07.2009
Сообщений: 225
08.08.2010, 11:48 20
xGravity,
Вот накидал программку, передвигается курсором по пунктам "Создать базу", "Редактировать" и "Удалить".

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
#include <iostream>
#include <windows.h>
#include <conio.h>
using std::cout;
 
int main()
{
    setlocale(LC_ALL, "rus");
    bool exit = false;
    int ch;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD position = {0, 0};
    cout << (char)16 << "Создать базу \n Редактировать \n Удалить";
    SetConsoleCursorPosition(hConsole, position);
    while(!exit)
    {
        ch = _getch();
        switch(ch)
        {
            case 224:
            {
                switch(_getch())
                {
                    case 72:
                    {// нажата клавиша вверх
                        if(position.Y)
                        {
                            cout << " ";
                            position.Y--;
                            SetConsoleCursorPosition(hConsole, position);
                            cout << (char)16;
                            SetConsoleCursorPosition(hConsole, position);
                        }
                        break;
                    }
                    case 80:
                    {// нажата клавиша вниз
                        if(position.Y < 2)
                        {
                            cout << " ";
                            position.Y++;
                            SetConsoleCursorPosition(hConsole, position);
                            cout << (char)16;
                            SetConsoleCursorPosition(hConsole, position);
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
            }
            case 27:
            {
                exit = true;
                break;
            }
            default:
                break;
        }
    }
    return 0;
}
2
08.08.2010, 11:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2010, 11:48
Помогаю со студенческими работами здесь

Перемещение курсора в файле
Здравствуйте! Пишу программу, где работаю с файлом с помощью потока, и понадобилось переместить...

перемещение курсора в файле
как мне после первого цикла вернуть курсор в начала файла out? fseek ругает то, что первый элемент...

Координаты курсора в консоли
Существует аналог функции паскалевской GoToXY(x,y) - перемещает курсор по заданным координатам....

Смещение курсора по консоли
Всем привет! Я работаю в программе dev c++. И мне нужна помощь,чтобы определенный символ я смог...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru