Перейти к содержимому

Фото
- - - - -

[c++] как такое сделать


  • Вы не можете создать новую тему
  • Please log in to reply
20 ответов в этой теме

#1 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 19 августа 2004 - 16:54

Вот изучаю с++ , решил прогу написать(это для практики, ну по совету томата придумываю себе заачи). и уперся , ни в одной книге нет, а мозгов нехватает, как сделать такую штуку:
1) как сделать в консоли , это я под линуксом пишу, так .чтобы внизу была строка, в каторую человек вводил цифры, а посередине экрана эти цифры появлялись, надо сделать что-то типо окна. с элементами псевдографики, чтоб было как-бы меню, и можно было с ним работать( не мвшкой, а описанным способом) , так хочется сделать к примеры, внизу меню, жмешь 1, а он в верху или по центру(главное чтоб не ниже строки ввода) что-то писал, как можно вообще осуществить такое?
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#2 archi

archi
  • Пользователь
  • 84 сообщений
  • Откуда:Таллин

Отправлено 19 августа 2004 - 17:35

стандартными средствами c++ - AFAIK никак, если это и можно сделать - то только специализированными (заточенными под ОС) библиотеками вывода, которые имеют такие функции, как позиционирование курсора в определенные координаты...
Либо, если консоль умеет показывать ANSI control codes - выводить текст с ANSI escape-последовательностями, которые описаны здесь: http://www.delmar.ed...15L/ANSIsys.htm
Они позволяют позиционировать...
  • 0

#3 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 19 августа 2004 - 21:24

na *nix'ah est' biblioteka ncurses.h, s pomoschju etoj biblioteki mozhno takoe sdelat'.
smotri 'man 3 ncurses'
  • 0
int main(void)

#4 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 20 августа 2004 - 13:23

спасибо, попробую. а как раньше делали проги под дос , у и пд шел.
Рас так все вложно

а вот изменить цвет шрифта, размер, цвет фона только еск последовательностями можно, или есть какието встроеные функции?

Сообщение изменено: libricon (20 августа 2004 - 13:25 )

  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#5 archi

archi
  • Пользователь
  • 84 сообщений
  • Откуда:Таллин

Отправлено 20 августа 2004 - 18:22

дос предоставляет функции вывода символа в определенную позицию... и потом, дос - это совсем не консольное окно...
  • 0

#6 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 20 августа 2004 - 21:05

ну я думал,что и в консоли можно =(
Так значит си под них ущербнее си под дос, рас нет каких-то возможностей ?
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#7 Zeppelin

Zeppelin

    Китайский Чай

  • Пользователь
  • 210 сообщений
  • Откуда:Таллин

Отправлено 20 августа 2004 - 21:09

только специализированными (заточенными под ОС) библиотеками вывода

ANSI - вполне себе стандартное средство, IMHO. И любая, сколь нибудь уважающая себя ОС, поддерживает данный стандарт.

дос - это совсем не консольное окно...

Очень даже себе консольное окно. Не вижу принципиальной разницы. И самое главное ANSI умеет (хотя и не по дефолту).

А для Unix(-like), как уже было сказано, ncurses - вполне типичное решение проблемы - позволяет не заморачиваться с возможностями консоли/терминала и программа работает (потенциально) с любым терминалом.
  • 0
Лучший чай из Китая, провожу чайные церемонии, обращайтесь!

#8 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 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 ,а как кончающаяся?
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#9 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 20 августа 2004 - 21:40

а раз все так сложно, есть ли в Х11 что-то похожее на visual под виндовс, и если можно, дайте ссылочку на руководства по их использованию.плиззз
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#10 Zeppelin

Zeppelin

    Китайский Чай

  • Пользователь
  • 210 сообщений
  • Откуда:Таллин

Отправлено 20 августа 2004 - 22:10

а раз все так сложно, есть ли в Х11 что-то похожее на visual под виндовс

Так тебе консоль, или X11? Определись уж сначала...

И что это за "visual" такой? Студия чтоль? Если ищешь IDE, из бесплатного могу порекомендовать Eclipse+CDT. Если что полегче, и UNIX-way, то, наверное, emacs с кучей соответствующий плагинов. Только вот лично я с ним так и не разобрался, хотя, цели себе такой не ставил. В любом случае это совсем не похоже на Визуальную Студию. Из коммерческих продуктов что-то было у Visual SlickEdit...

Надеюсь другие участники дискуссии знают о средствах разраоботки под Linux больше меня, и подскажут, что тебе лучше использовать...
  • 0
Лучший чай из Китая, провожу чайные церемонии, обращайтесь!

#11 Sergio

Sergio
  • Постоялец
  • 3 051 сообщений

Отправлено 20 августа 2004 - 23:29

а раз все так сложно, есть ли в Х11 что-то похожее на visual под виндовс, и если можно, дайте ссылочку на руководства по их использованию.плиззз

Просмотреть сообщение

Есть glade, kdevelop, еще кажется qt-designer, или что-то в этом роде. Ссылок дать не могу, ищи в гугле.
  • 0

#12 triplea

triplea
  • Пользователь
  • 27 сообщений

Отправлено 21 августа 2004 - 00:48

Наверное как "Вижуал" тебе QTDesigner подойдет. Спрашивайте в популярных дистрибутивах :)
  • 0

#13 tomatensaft

tomatensaft

    Samurai Jack

  • Пользователь
  • 449 сообщений
  • Откуда:Tallinn

Отправлено 21 августа 2004 - 13:16

я чето не понял, а как выводить на окно символы, и как их получать, что значит функция начинающаясяна mv ,а как кончающаяся?

Просмотреть сообщение


http://www.tldp.org/...OWTO/index.html

Определенно, в этой библиотеке должна быть функция для сброса буфера на консоль.

Да, кстати, на C++ есть неплохая кросс-платформенная библиотека для написания GUI-приложений -- wxWidgets. По ней есть много документации и руководств (HOWTO, туториалы). Если решишь ее взять на вооружение, дай знать, я могу дать ряд советов по работе с ней.

Сообщение изменено: tomatensaft (21 августа 2004 - 13:22 )

  • 0
"This is all I want'd t' say 'bout dat..." © Forest Gump

#14 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 21 августа 2004 - 17:49

интересно, привлекательно даже : " You need to learn a new API. However, the wxWidgets API has been praised for its intuitiveness and simplicity, and can be far easier to learn and use than a native GUI API such as Motif" ,а это просто за гранью:""wxWidgets 2 has been an absolute dream." Очень даже интересно, я щас почитаю что это такое, в about , в гугле нет руководств по использоваию, а английским я еще не привык, может у тебя томат есть хоть какой-то туториал?

что касается ncurces, я не понял, эта библиотека есть только под них* системах, или как, но врде не сложно написать а ней что-то, только кучу функций надо выучить=)

Сообщение изменено: libricon (21 августа 2004 - 17:50 )

  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#15 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 21 августа 2004 - 18:05

Я вот если правельно понял, то это для создания графических прилаженй, каторые идут и на них* like и на виндовс и на хре чем еще(там чето было про mac) + это еще что:"OpenGL integration
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." как это в линукс опен гл запустить можно?
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#16 tomatensaft

tomatensaft

    Samurai Jack

  • Пользователь
  • 449 сообщений
  • Откуда:Tallinn

Отправлено 21 августа 2004 - 22:41

Под Linux есть огромное количество программ на основе OpenGL. Это кросс-платформенный API и его поддержка есть и под Linux.

wxGLCanvas позволяет нарисовать нечто используя методы OpenGL на элементе GUI. Туториалов у меня по wxWidgets нет. Все, что я использовал, было на английском языке.

По поводу ncurses ты прав, кроме одного: выучивать фукции не нужно. Достаточно сориентироваться в документации API и обращаться к ней всякий раз когда это требуется. Со временем, основные функции и вообще особенности выучатся сами собой.
  • 0
"This is all I want'd t' say 'bout dat..." © Forest Gump

#17 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 21 августа 2004 - 23:28

ладно,перебьюсь. там на сайте я видел много инфы,расберусь как-нибуть + помогут люди. Я правдо на си не очень хороший программер, я его тлько начал изучать(ну пол года) да и то не очень усердно, вот настрою линукс и вперед.
Томат,так я правельно понял что это такое? это для создания графических и не только приложений ,так...
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#18 tomatensaft

tomatensaft

    Samurai Jack

  • Пользователь
  • 449 сообщений
  • Откуда:Tallinn

Отправлено 22 августа 2004 - 11:02

Что -- для создания графических и не только приложений?

wxWidgets? Да. Для приложений с графическим пользовательским интерфейсом.

ncurses? Нет (эта библиотека -- для создания оконных "псевдографических" интерфейсов).
  • 0
"This is all I want'd t' say 'bout dat..." © Forest Gump

#19 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 22 августа 2004 - 12:03

ну так я и понял, ща дочитаю туториал их и приступлю к использованию + скаать надо
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#20 libricon

libricon
  • Постоялец
  • 572 сообщений
  • Откуда:Маарду

Отправлено 22 августа 2004 - 22:23

а мне качать стабильную или свежую версию, и какую , для Gtk+ или X11?
  • 0
Пингвин птица гордая, пока не пнешь, не полетит!!!

#21 tomatensaft

tomatensaft

    Samurai Jack

  • Пользователь
  • 449 сообщений
  • Откуда:Tallinn

Отправлено 23 августа 2004 - 10:27

Качай стабильную 2.4.2. Причем качай сырцы и компилируй сам -- заодно разберешься со структурой. Для этого тебе понадобятся -devel пакеты GTK+, glib и других обычных (libstdc++, glibc, ...).
  • 0
"This is all I want'd t' say 'bout dat..." © Forest Gump