GUI консольных приложений - PullRequest
5 голосов
/ 25 мая 2010

Как создаются подобные графические интерфейсы, но в консольных приложениях?

Есть много примеров, таких как alsamixer: alt text

Ответы [ 5 ]

4 голосов
/ 25 мая 2010

Библиотека Curses может использоваться для создания таких пользовательских интерфейсов. Вот введение в NCurses - самая известная реализация Curses.

2 голосов
/ 25 мая 2010

В DOS было много разных API-интерфейсов GUI, доступных до появления Windows, и все они в основном скрывали базовые VGA-вызовы, которые вам нужно было сделать, если вы хотите напрямую кодировать. Я лично работал с включенными TurboPascal и Foxpro. Вкратце, была даже Visual Basic для DOS, которая включала похожий API. Помимо вывода текста эти API часто включают такие функции, как раскрывающиеся меню, рисование простых рамок и заливка. Некоторые из более сложных из них могут даже иметь символьную «Windows», которую можно перемещать по экрану с помощью курсора.

VGA может быть доступен либо в Text (очень похоже на терминал мэйнфрейма, где вы фактически просто выводите символ в строке / столбце), либо в графическом режиме, который намного больше похож на GDI (хотя вы должны были сделать все сам, был медленным и редко использовался для чего-либо, кроме ранних программ рисования и рисования). Ваш пример - текстовый режим.

В Unix, где такие соображения являются более актуальными, стандарт должен использовать Curses , который является аналогичным API текстового режима, который скрывает основные характеристики терминала.

2 голосов
/ 25 мая 2010

Termbox - интересная альтернатива ncurses, которая также может вас заинтересовать.

2 голосов
/ 25 мая 2010

Большинство консольных платформ имеют такие функции, как goto (x, y) для позиционирования курсора где-нибудь на экране.

Это можно использовать для "рисования" экрана любыми символами / цветами ascii, которые вы хотите.

1 голос
/ 25 мая 2010

Библиотеки, такие как Curses, делают это так же, как оконные менеджеры работают в графической среде. Элементы управления, такие как окна, кнопки, флажки, все определяются библиотекой.

Вместо WriteLining на экран, вы пишете текст в окно или задаете текст какого-либо элемента управления. Библиотека отслеживает окна, перекрытия, эффекты границ, тени и поведение при перетаскивании (если поддерживается мышь). Он создает буфер символов из символов, цвета переднего плана и фона.

Опубликованный пример goto (x, y) будет работать, но если реализация сделает это для каждого символа, производительность заметно снизится. Чтобы добиться быстроты, когда вы вносите изменения в некоторые текстовые или другие свойства, библиотека знает прямоугольные области, которые должны быть обновлены из буфера символов, и записывает новые символьные данные для этой области на экран одним фрагментом с оптимизированными вызовами. к видео драйверам.

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

Я бы хотел, чтобы в .Net была встроена целая библиотека оконных окон консоли ... ... [вздох] Я думаю, что эти старые консольные приложения выглядят довольно мило.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...