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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 142, средняя оценка - 4.64
xGravity
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 42
13.05.2010, 10:18     Перемещение курсора в консоли #1
Помогите реализовать новичку перемещение курсора в консоли.Т.е. есть меню например
Создать базу
Редактировать
Удалить
И нужно передвигатся по нему курсором
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mind66
3 / 3 / 0
Регистрация: 27.09.2009
Сообщений: 41
13.05.2010, 13:15     Перемещение курсора в консоли #2
как по мне легче тогда уже в вин апи это сделать.
qpMM
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
03.08.2010, 19:47     Перемещение курсора в консоли #3
mind66, вопрос читал? в чем смысл твоего ответа?

А вообще, та же ситуация. Собственно, вопрос:
Как можно переместить курсор в начало меню? А потом просто при нажатии курсорных стрелок выделять строку, в смысле, видоизменять ее и отлавливать подтверждение.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
03.08.2010, 20:25     Перемещение курсора в консоли #4
qpMM, а смысл в том, что не стоит так извращаться над консолью, ведь можно написать приложение на WinAPI и будет все намного проще и удобнее
Vladimir616
110 / 110 / 3
Регистрация: 05.07.2009
Сообщений: 224
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);
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.08.2010, 01:37     Перемещение курсора в консоли #6
xGravity, если уж совсем новичёк - так сделайте проще
1 - Создать базу
2 - Редактировать
3 - Удалить
...
или обязательно с консольными "красивостями"? Если уж совсем серьёзно всё делать - так это нормальный графический интерфейс нужен. Самый быстрый путь по-моему C#. А если для личного пользования - так и с текстовым меню жить вполне можно...
qpMM
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
04.08.2010, 07:37     Перемещение курсора в консоли #7
M128K145, я пока изучаю консольное программирование на С++, видно в какой раздел пишу?
Ясен пень, это все будет легче сделать с GUI, но мне пока туда рано соваться.
Vladimir616, спасибо большое, попробую.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
04.08.2010, 09:02     Перемещение курсора в консоли #8
qpMM, я тоже когда-то изучал "консольное программирования", но когда возникла необходимость я самостоятельно начал знакомится с MFC.
Я ни на чем не настаиваю, я просто объяснил смысл поста mind66
qpMM
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
04.08.2010, 13:30     Перемещение курсора в консоли #9
Ну пока я должным образом не ознакомлюсь с консолью, на графику переходить не хочу. Да и это довольно интересно выделывать какие-либо вещи, не характерные для нее (консоли). Полученные знания все равно пригодятся, а голову поломать над реализацией одно только удовольствие
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
04.08.2010, 17:57     Перемещение курсора в консоли #10
qpMM, тебе поможет эта темка использование клавиш
там нужно дописать конструкцию свитч которая будет позволять бегать по менюшке.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
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;
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
04.08.2010, 18:39     Перемещение курсора в консоли #12
neske, все бы хорошо, только перемещается не курсор консоли, а курсор мыши...
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
04.08.2010, 20:39     Перемещение курсора в консоли #13
Ах да, точно.
А то я увидел "курсор", и даже не задумывался ))
qpMM
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;
}
оказывалось, что не срабатывает.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
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;
}
Миниатюры
Перемещение курсора в консоли  
qpMM
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
04.08.2010, 22:33     Перемещение курсора в консоли #16
Пардон, а почему тогда у меня не получалось? О_о Тот же мой последний код.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
04.08.2010, 22:37     Перемещение курсора в консоли #17
А вы попробуйте завести цикл
qpMM
0 / 0 / 0
Регистрация: 03.08.2010
Сообщений: 31
04.08.2010, 23:08     Перемещение курсора в консоли #18
А что изменяется, если я проверяю только одно условие?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
04.08.2010, 23:18     Перемещение курсора в консоли #19
qpMM, переменная c изменяется
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2010, 11:48     Перемещение курсора в консоли
Еще ссылки по теме:

Перемещение курсора C++
C++ Координаты курсора в консоли
Перемещение текстового курсора вверх (анти endl;) C++

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

Или воспользуйтесь поиском по форуму:
Vladimir616
110 / 110 / 3
Регистрация: 05.07.2009
Сообщений: 224
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;
}
Yandex
Объявления
08.08.2010, 11:48     Перемещение курсора в консоли
Ответ Создать тему
Опции темы

Текущее время: 00:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru