Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/76: Рейтинг темы: голосов - 76, средняя оценка - 4.95
25 / 25 / 15
Регистрация: 12.10.2013
Сообщений: 183

Навигация в консоли С++ стрелками и выбор подменю клавишей Ввода

28.04.2015, 16:06. Показов 15052. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, столкнулся со следующей задачей (конечно больше для себя, но уже загорелся ею!) - есть консольное меню (скриншот).
Хотелось бы сделать, чтобы меню от 1 до 5 было возможно выбрать стрелками с заменой цвета. Пытался понять что тут да как, но, честно, скопипастив - критануло, ругнувшись на какую-то из библиотек (на данный момент используется VS2013).
С чего бы стоило подступиться к этому? Как начать?
Прошу помощи, так как сам уже немножко заколебался. >_<
Миниатюры
Навигация в консоли С++ стрелками и выбор подменю клавишей Ввода  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.04.2015, 16:06
Ответы с готовыми решениями:

Можно ли запретить переход между компонентами на форме стрелками и клавишей Tab?
В программе при фокусе на 1 из кнопок регистрируются нажатия стрелок. При этом при нажатии стрелки событие нажатия не активируется, но...

Что не так с клавишей PanelMenu? Она не реагирует на нажатие никак, ибо иначе показывалось бы подменю
package javaapplication4; import javax.swing.*; import java.awt.event.*; import java.awt.*; class MyFrame extends JFrame{ ...

Управление стрелками в консоли
Как сделать управление стрелками что-бы когда нажимаешь стрелочку выполнялось опридельоное действие вызавалась функция и тд.

7
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.04.2015, 16:49
Либо conio.h (но он цветом выделять не умеет)
Либо WinAPI. Для этого всё что нужно у вас уже установлено. У Юры пример посмотрите, на первый взгляд то, что нужно.

Курсоры я никогда не сдвигал, а вот в жёлтый красил.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <windows.h>
 
int main()
{
    CONSOLE_SCREEN_BUFFER_INFO con;
    HANDLE hndl = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hndl, &con);
    WORD default_style = con.wAttributes; // запоминаем значения по-умолчанию
    // выводим жёлтым жирным цветом
    SetConsoleTextAttribute(hndl, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
 
    std::cout << "Hello world!";
 
    SetConsoleTextAttribute(hndl, default_style);
    std::cin.get();
}
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 6
28.04.2015, 16:52
n0n4m3r, советут почитать Побегайло Системное программирование в Window. Очень вам поможет раздел по работе с консолью.
2
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.04.2015, 16:55
Могу только предложить такое решение (мне кажется оно костыльным, наверняка у WinAPI есть спец. методы для перерисовки области):
1. храните номер строки, для которого нужно рисовать выделенным цветом
2. считывайте символ через _getch() из conio.h (в цикле)
3. если стрелка и не достигли границы, сдвигайте номер выделенной строки
4. очищаете экран через system("cls")
5. рисуете строки, при этом для выделенной строки вешаете другие консольные атрибуты
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 6
28.04.2015, 16:56
MrGluck, все проще и вы правы:
Цитата Сообщение от MrGluck Посмотреть сообщение
наверняка у WinAPI есть спец. методы для перерисовки области
Есть специальные функции для работы с буффером консоли.
0
28.04.2015, 21:28

Не по теме:

ты случайно не тот n0n4m3r который сервер WoW курировал?

0
25 / 25 / 15
Регистрация: 12.10.2013
Сообщений: 183
28.04.2015, 23:59  [ТС]
Всем спасибо, буду читать Побегайло! Надеюсь удастся реализовать задумку. Если получится - выложу как в эту темку!

Не по теме:

Нет, не тот n0n4m3r!

0
0 / 0 / 0
Регистрация: 11.07.2015
Сообщений: 1
25.07.2015, 22:07
Предлагаю простенький способ выбора стрелками меню.
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
/*Selected menu*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
 
#define BUFFERSIZE 72
 
int getPosition(void){
 
    static int result = 0;
    static int count = 0;
    
    if (count){
        int ch = _getch();
        if (ch == 0 || ch == 0xE0)
            ch = _getch() << 8;
 
        switch (ch){
        case 0x5000:
            if (result < 3 && result >= 0) result++;
            break;
        case 0x4800:
            if (result > 0 && result <= 3) result--;
            break;
        default:
            puts("Incorrect input!");
            break;
        }
    }
 
    count++;
    return result;
}
 
int main(){
 
    char *string[BUFFERSIZE] = {
        "File create.",
        "View File.",
        "Edit File.",
        "Exit."
    };
    char pointStart[BUFFERSIZE] = ">>";
    char pointFinish[BUFFERSIZE] = "  ";
    unsigned row = 0, col = 0, i = 10;
    int choice = 0;
 
    do{
        
        choice = getPosition();
        system("cls");
        for (row = 0; row < 4; row++)
            printf("%s %s\n",
            row == choice ? pointStart : pointFinish,
            string[row]);
    } while (i--);
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2015, 22:07
Помогаю со студенческими работами здесь

Меню в консоли, управление стрелками
Подскажите пожалуйста, как сделать меню типа: пункт 1 пункт 2 и так далее Чтобы между пунктами можно было перемещаться курсором и...

Меню в консоли управляемое стрелками
Как создать консольное меню в c#, которое управляется стрелками. Надо сделать через switch и for.

Сделать подменю в консоли С++
Начну с того, что я дно, я дно на самом дне днищ. И мне бы хотелось бы узнать конструкцию подменю. Как реализовать? Вот так не катит,...

Сделать подменю в консоли С++ часть 2
Хелп, ткните пальцем в какую сторону копать #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru