Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/12: Рейтинг темы: голосов - 12, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 18

Аналог меню в консоле

28.01.2011, 11:08. Показов 2536. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем
Обращаюсь к Вам за помощью Помогите, плиз, разобраться с задачкой.
Мне надо сделать аналог менюшки в консоле - верхняя строка должна показывать строку с текущим временем(час,мин,сек). Как реализовать что-то подобное на mainloop Windы в консоле
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2011, 11:08
Ответы с готовыми решениями:

Аналог меню в консоле
Привет всем Подскажите, пожалуйста, как реализовать следующую задачку? ОС - Линуха, ДОС. Есть табло сигнализации 4 строки. В своей...

Создание меню в консоле для работы с БД
Есть База Данных, подключил ее к среде разработки visual studio на С#(CSharp).Теперь нужно сделать меню в косоле, чтобы заносить данные не...

Как сделать выпадающее меню как в командере в консоле?
Здравствуйте. Есть такой вопрос. Как мне сделать выпадающее меню как в тотал командер в чёрной консоле? Желательно на примере. Заранее...

11
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
28.01.2011, 14:16
Хм... даже не знаю возможно ли это. Во всяком случае не видел, чтобы у кого - то это получилось.

Ты уверен, что это выполнимо?
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
28.01.2011, 15:02
нечто похожее на меню можно сделать оператором switch. Типо выбирай вариант и программа выполнит то что нужно
0
 Аватар для XLBaron
0 / 0 / 0
Регистрация: 28.01.2011
Сообщений: 27
28.01.2011, 15:21
Цитата Сообщение от Mogul-kan Посмотреть сообщение
нечто похожее на меню можно сделать оператором switch. Типо выбирай вариант и программа выполнит то что нужно
да мы делали такое когда или Case юзай и разную ерунду для отрисовки типо Lineto
0
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
28.01.2011, 15:22
Цитата Сообщение от Mogul-kan Посмотреть сообщение
нечто похожее на меню можно сделать оператором switch. Типо выбирай вариант и программа выполнит то что нужно
Я так понял, что автор имеет ввиду настоящее меню, как в гуи программах или программе типа турбо паскаля. Но насколько я знаю в консоле невозможно обрабатывать нажатия мышкой, или я не прав?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.01.2011, 15:45
Цитата Сообщение от @KOT@ Посмотреть сообщение
Но насколько я знаю в консоле невозможно обрабатывать нажатия мышкой, или я не прав?
не прав) если писать под Турбо С++ 3.0 то с помощью 33-го прерывания можно работать с мышкой
1
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
28.01.2011, 16:06
Цитата Сообщение от Maxwe11 Посмотреть сообщение
не прав) если писать под Турбо С++ 3.0 то с помощью 33-го прерывания можно работать с мышкой
О, не знал, спасибо)) буду знать на будущее!!!
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.01.2011, 19:57
А зачем Turbo C++? Есть API'лки, позволяющие работать с манипулятором "мышь" в консоли, так же есть ф-ции для "украшения" консольного окна, если захотеть, то можно реализовать меню типа как в GUI. Я когда-то на АСМе такое делал, через те же WinAPI)

Добавлено через 4 минуты
Maxwe11, а что TURBO C++ позволяет с досовскими прерываниями работать? Просто я в нем ни когда не работал, не знаю...
А в 33 прерывании (int 21h) нет средств для работы с мышью, тут другое прерывание нужно, не помню какое...

Добавлено через 2 минуты
Нашел, нужно прерывание 33h, т.е. 51-ое ))
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.01.2011, 19:59
Цитата Сообщение от Kastaneda Посмотреть сообщение
а что TURBO C++ позволяет с досовскими прерываниями работать?
да там даже несколько функций для работы с ними и структура с регистрами)
Цитата Сообщение от Kastaneda Посмотреть сообщение
А в 33 прерывании (int 21h) нет средств для работы с мышью,
для мышки 33-е прерывание int 33h
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.01.2011, 20:12

Не по теме:

33hex = 51dec )



Добавлено через 9 минут
Работы с мышью в консоли
Большое достоинство консольных приложений — встроенная средствами Windows поддержка мыши. Она реализуется с помощью функции ReadConsolelnput. Важно отметить, что эта функция используется для получения информация о событиях не только мыши, но и о событиях клавиатуры, изменении размера окна и т. д.

B00L ReadConsoleInput(HANDLE hConsolelnput. PINPUT_RECORD lpBuffer, DWORD nLength. LPDWORD lpNumberOfEventsRead);

Параметры этой функции:
Consolelnput — стандартный дескриптор ввода, полученный функцией GetStdHandle;
lpBuffer — указатель на буфер, в который записывается информация о событии мыши, — эта область памяти имеет структуру, называемую INPUT_ RECORD, ее формат рассмотрен чуть ниже (необходимо заметить, что возможно групповое чтение информации из входного буфера, поэтому указатель ipBuffer может указывать на массив структур; информация о том, сколько событий будет читаться в этот массив структур, определяется параметром nLength);
nLength — размер во входных записях буфера, на который указывает указатель lpBuffer;
lpNumberOfEventsRead — определяет переменную, в которую записывается
действительное число прочитанных записей входного буфера.

Запись входного буфера консоли имеет структуру, называемую INPUTRECORD. Ее описание на языке C++ выглядит так:

typedef struct _INPUT_RECORD { WORD EventType; union {
KEYJVENT_RECORD KeyEvent;
MOUSE_EVENT_RECORD MouseEvent;
WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
MENU_EVENT_RECORD MenuEvent:
FOCUSJVENT_RECORD FocusEvent;
} Event: } INPUT_RECORD;

В этой структуре первое поле EventType размером в слово содержит тип события, а второе поле Event является объединением различных структур. Поля какой из структур будут заполнены, определяется типом события, то есть первым полем, которое может принимать значения:
KEY_EVENT=0001h - поле Event содержит структуру KEYEVENTRECORD с информацией относительно события клавиатуры;
MOUSE_EVENT=0002h — ноле Event содержит структуру
MOUSEEVENTRECORD с информацией относительно движения мыши или нажатия кнопки;
WINDOW_BUFFER_SIZE_EVENT-O004h - поле Event содержит структуру
WINDOW_ BUFFER_SIZE_RECORD с информацией относительно нового размера экранного буфера;
MENU_EVENT=OOO8h — поле Event содержит структуру MENUEVENTRECORD (это событие используется внутри Windows и должно игнорироваться);
FOCUS_EVENT=0010h - поле Event содержит структуру FOCUSEVENTRECORD (это
событие используется внутри Windows и должно игнорироваться).

Для обработки события мыши структура MOUSEEVENTRECORD выглядит так:

typedef struct _MOUSE_EVENT_RECORD {
COORD dwMousePosition;
DWORD dwButtonState;
DWORD dwControlKeyState:
DWORD dwEventFlags;
} MOUSE_EVENT_RECORD;

Исходя из вышесказанного структура INPUTRECORD для обработки событий мыши в программе на ассемблере должна выглядеть так:
INPUT_RECORD struc EventType dw 0 dwMousePosition struc x dw 0 у dw 0 ends
dwButtonState dw 0 dwControlKeyState dw 0 DwEventFlags dw 0 ends
Поле EventType для события мыши содержит значение MOUSE_EVENT=0002h, а поля структуры MOUSEEVENTRECORD соответственно означают следующее:
ш dwMousePosition — координаты мыши в окне консоли (в символьных координатах);
м dwButtonState — состояние кнопок мыши в момент возникновения события, при нажатии кнопок устанавливаются следующие биты (при одновременном нажатии устанавливается несколько соответствующих битов):
если установлен бит 0 ноля dwButtonState, то в момент наступления события была нажата левая кнопка мыши;
если установлен бит 1 поля dwButtonState, то в момент наступления события была нажата правая кнопка мыши;
если установлен бит 2 поля dwButtonState, то в момент наступления события была нажата средняя кнопка мыши, если она есть;
dwControlKeyState — поле описывает состояние управляющих клавиш клавиатуры в момент наступления события мыши (если одновременно нажато несколько клавиш, то значение в этом поле является результатом операции логического сложения ИЛИ перечисленных ниже значений):
• RIGHT_ALT_PRESSED=0001h - нажата правая клавиша Alt;
• LEFT_ALT_PRESSED=0002h - нажата левая клавиша Alt;
• RIGHT_CTRL_PRESSED=0004h — нажата правая клавиша
Ctrl; LEFT_CTRL_PRESSED=OOO8h — нажата левая клавиша Ctrl;
• SHIFT_PRESSED=OOlOh - нажата любая клавиша SHIFT;
• NUMLOCK_ON=0020h - индикатор NumLock включен;
• SCROLLLOCK_ON=0040h — индикатор ScrollLock включен;
• CAPSLOCK_ON=0080h — индикатор CapsLock включен;
ENHANCED_KEY=0100h — нажата клавиша расширенной клавиатуры (101 и 102 клавиши): Ins, Del, Home, End, Page Up, Page Down, «-, t, -», I, / или Enter;
Ш dwEventFl ags — поле содержит одно из двух значений: »
MOUSE_MOVED=0001h — перемещение мыши;
• DOUBLE_CLICK=0002h — выполнен двойной щелчок мыши.

0
22 / 22 / 2
Регистрация: 06.12.2010
Сообщений: 125
28.01.2011, 20:35
вряд ли тут требуется именно графическая менюшка. а время в верхней строке - это вообще даром: таймер и gotoxy. и обычная печать.
0
0 / 0 / 0
Регистрация: 25.06.2009
Сообщений: 18
31.01.2011, 10:50  [ТС]
Привет всем
Спасибо большое за предоставленную инфу

Прошу прощения, что не четко выразил суть своей проблемы (сам толком не понимал).

ОС - Линуха, ДОС. Есть табло сигнализации 4 строки. В своей проге я должен имитировать эти 4 строки, а затем по RSу отображать их в этом табло. Первая строчка - дата и время,должна постоянно отображаться, две следующие - информационные(e.g. мигать в случаи аварии) и последняя - меню. Выбор происходит стрелками.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2011, 10:50
Помогаю со студенческими работами здесь

Аналог меню. Вызов подпрограмм
Задали тут сделать обобщающую программку,где все лабы запускаются из меню по выбору.После того как какая-нибудь программа выполнена она...

Сделать общие экранные кнопки (аналог экранных кнопок назад, домой, меню)
Прежде чем создать тему изрядно покопался, но ничего не нашел. Может, потому что мало информации или я не понимаю что ищу. Так вот, каждый...

Работа с меню. При клике на кнопке меню или вне его, меню должно закрываться
Добрый вечер! Изучаю JQuery. Вот ради развития решил написать меню, практически такое же как на Хабре. Два дня ломаю голову над тем, как...

Как добавить выплывающее меню к уже готовому горизонтальному меню (не меняя дизайн горизонтального меню)?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html...

Раскрывающееся меню - при открытии/закрытии вложенного меню закрывается все меню
Проблема во вложенном меню. При открытии/закрытии вложенного меню закрывается все меню. Надо, чтобы главное меню не реагировало на клики во...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru