[c++] как такое сделать
#1
Отправлено 19 августа 2004 - 16:54
1) как сделать в консоли , это я под линуксом пишу, так .чтобы внизу была строка, в каторую человек вводил цифры, а посередине экрана эти цифры появлялись, надо сделать что-то типо окна. с элементами псевдографики, чтоб было как-бы меню, и можно было с ним работать( не мвшкой, а описанным способом) , так хочется сделать к примеры, внизу меню, жмешь 1, а он в верху или по центру(главное чтоб не ниже строки ввода) что-то писал, как можно вообще осуществить такое?
#2
Отправлено 19 августа 2004 - 17:35
Либо, если консоль умеет показывать ANSI control codes - выводить текст с ANSI escape-последовательностями, которые описаны здесь: http://www.delmar.ed...15L/ANSIsys.htm
Они позволяют позиционировать...
#4
Отправлено 20 августа 2004 - 13:23
Рас так все вложно
а вот изменить цвет шрифта, размер, цвет фона только еск последовательностями можно, или есть какието встроеные функции?
Сообщение изменено: libricon (20 августа 2004 - 13:25 )
#7
Отправлено 20 августа 2004 - 21:09
ANSI - вполне себе стандартное средство, IMHO. И любая, сколь нибудь уважающая себя ОС, поддерживает данный стандарт.только специализированными (заточенными под ОС) библиотеками вывода
Очень даже себе консольное окно. Не вижу принципиальной разницы. И самое главное ANSI умеет (хотя и не по дефолту).дос - это совсем не консольное окно...
А для Unix(-like), как уже было сказано, ncurses - вполне типичное решение проблемы - позволяет не заморачиваться с возможностями консоли/терминала и программа работает (потенциально) с любым терминалом.
#8
Отправлено 20 августа 2004 - 21:27
* окно (window): внутреннее представление, содержащее изображение части экрана. WINDOW определен в ncurses.h.
* экран (screen): это окно размером в целый экран (с верхнего левого до нижнего правого угла). Экранами являются stdscr и curscr.
* терминал (terminal): специальный экран с информацией о том, как выглядит экран на данный момент.
* переменные: следующие переменные и константы, определенные в ncurses.h:
o WINDOW *curscr: текущий экран
o WINDOW *stdscr: стандартный экран
o int LINES: строки на терминале
o int COLS: колонки на терминале
o bool TRUE: true flag, 1
o bool FALSE: false flag, 0
o int ERR: error flag, -1
o int OK: ok flag, 0
* Функции: в описаниях функций аргументы будут следующих типов:
o win - WINDOW*
o bf - bool
o ch - chtype
o str - char*
o chstr - chtype*
o fmt - char*
o otherwise int
Обычно программа, использующая ncurses, выглядит так:
#include
...
main()
{
...
initscr();
/* вызов функции ncurses */
endwin();
...
}
Подключение ncurses.h определит переменные и типы для ncurses, такие как WINDOW, и прототипы функций. Автоматически подключатся stdio.h, stdarg.h, termios.h и unctrl.h.
initscr() используется для инициализации структур данных ncurses и для чтения файла terminfo. Будет захвачена память под stdscr и curscr. Если произойдет ошибка, то initscr вернет ERR. В противном случае возвращается указатель на stdscr. Кроме этого, экран будет очищен и будут проинициализированы LINES и COLS.
endwin() очистит все выделенные ресурсы ncurses и восстановит режимы tty, какими они были до вызова initscr(). Функция endwin() должна вызываться перед любой другой функцией из библиотеки ncurses и перед выходом из вашей программы. Если вы хотите использовать для вывода более чем один терминал, используйте newterm(...) вместо initscr().
Компилируйте программу посредством:
gcc [flags] files -lncurses
Вы можете устанавливать любые флаги (см. gcc(1)). Если путь к ncurses.h изменился, вы должны включить следующую строку, иначе ncurses.h, nterm.h, termcap.h и unctrl.h не будут найдены:
-I/usr/include/ncurses
Другие возможные в Linux флаги: O2 скажет gcc произвести некоторую оптимизацию; -ansi: для ANSI си-кода; -Wall выведет все предупреждения; -m486 оптимизирует код для Intel 486 (можно и для Intel 386).
Библиотека ncurses находится в /usr/lib. Существует 3 версии библиотеки:
* libncurses.a обычная ncurses
* libdcurses.a ncurses для отладки
* libpcurses.a ncurses для профилирования (существует ли что-нибудь после 1.8.6libcurses.a?)
* libcurses.a не четвертая версия, это первоначальная BSD curses (в slackware 2.1.0 в пакете bsd).
Структуры данных для экрана называются windows и определены в ncurses.h. Окно это нечто типа символьного массива в памяти, которым программист может манипулировать без вывода на терминал. При помощи newwin(...) вы можете создать другие окна.
Чтобы оптимально обновить физический терминал, ncurses имеет другое окно, curscr. Это изображение, реально выводимое на экран. Для отображения stdscr на экране используется функция refresh(). После этого ncurses обновит curscr и физический терминал содержимым stdscr. Библиотечные функции произведут внутреннюю оптимизацию для процесса обновления, поэтому вы можете менять различные окна и затем обновлять экран сразу самым оптимальным способом.
Функциями ncurses вы можете работать со структурой данных window. Функции, начинающиеся с w, позволяют назначать окно window, тогда как остальные обычно имеют дело с stdscr. Функции, начинающиеся с mv, прежде всего переместят курсор на позицию y,x.
Символы имеют тип chtype, который является long unsigned int , чтобы сохранять дополнительную информацию о себе (атрибуты и т.д.).
Библиотека ncurses использует базу данных terminfo. Обычно она находится в usr/lib/terminfo/, и ncurses обращается туда за локальными определениями терминала. Если вы хотите проверить некоторые другие определения для терминала, не исправляя первоначальную terminfo, установите соответственно переменную среды TERMINFO. Эта переменная будет протестирована ncurses, и вместо usr/lib/terminfo/ сохранятся ваши определения.
Текущей версией ncurses является (на момент написания книги) 1.8.6.
В конце этого раздела вы найдете обзорную таблицу для BSD-Curses, ncurses и Sun-OS 5.4 curses.
я чето не понял, а как выводить на окно символы, и как их получать, что значит функция начинающаясяна mv ,а как кончающаяся?
#10
Отправлено 20 августа 2004 - 22:10
Так тебе консоль, или X11? Определись уж сначала...а раз все так сложно, есть ли в Х11 что-то похожее на visual под виндовс
И что это за "visual" такой? Студия чтоль? Если ищешь IDE, из бесплатного могу порекомендовать Eclipse+CDT. Если что полегче, и UNIX-way, то, наверное, emacs с кучей соответствующий плагинов. Только вот лично я с ним так и не разобрался, хотя, цели себе такой не ставил. В любом случае это совсем не похоже на Визуальную Студию. Из коммерческих продуктов что-то было у Visual SlickEdit...
Надеюсь другие участники дискуссии знают о средствах разраоботки под Linux больше меня, и подскажут, что тебе лучше использовать...
#13
Отправлено 21 августа 2004 - 13:16
я чето не понял, а как выводить на окно символы, и как их получать, что значит функция начинающаясяна mv ,а как кончающаяся?
http://www.tldp.org/...OWTO/index.html
Определенно, в этой библиотеке должна быть функция для сброса буфера на консоль.
Да, кстати, на C++ есть неплохая кросс-платформенная библиотека для написания GUI-приложений -- wxWidgets. По ней есть много документации и руководств (HOWTO, туториалы). Если решишь ее взять на вооружение, дай знать, я могу дать ряд советов по работе с ней.
Сообщение изменено: tomatensaft (21 августа 2004 - 13:22 )
#14
Отправлено 21 августа 2004 - 17:49
что касается ncurces, я не понял, эта библиотека есть только под них* системах, или как, но врде не сложно написать а ней что-то, только кучу функций надо выучить=)
Сообщение изменено: libricon (21 августа 2004 - 17:50 )
#15
Отправлено 21 августа 2004 - 18:05
A wxGLCanvas package is available to allow wxWidgets applications (currently GTK and Windows only) to support OpenGL. Very few changes need to be made to existing OpenGL applications." как это в линукс опен гл запустить можно?
#16
Отправлено 21 августа 2004 - 22:41
wxGLCanvas позволяет нарисовать нечто используя методы OpenGL на элементе GUI. Туториалов у меня по wxWidgets нет. Все, что я использовал, было на английском языке.
По поводу ncurses ты прав, кроме одного: выучивать фукции не нужно. Достаточно сориентироваться в документации API и обращаться к ней всякий раз когда это требуется. Со временем, основные функции и вообще особенности выучатся сами собой.
#17
Отправлено 21 августа 2004 - 23:28
Томат,так я правельно понял что это такое? это для создания графических и не только приложений ,так...
#18
Отправлено 22 августа 2004 - 11:02
wxWidgets? Да. Для приложений с графическим пользовательским интерфейсом.
ncurses? Нет (эта библиотека -- для создания оконных "псевдографических" интерфейсов).