Страница 1 из 1

Применение ncurses в С++

Добавлено: 05.04.2014 22:15
ArkanJR
Огромная просьба поделиться ссылками на русскоязычную литературу по применению ncurses в С++ (желательно рассчитанную на новичков). Почему-то везде используются примеры с синтаксисом С.

Re: Применение ncurses в С++

Добавлено: 05.04.2014 22:33
yars
Почему-то везде используются примеры с синтаксисом С.

Немудрено, если учесть, что ncurses написана именно на С.

Re: Применение ncurses в С++

Добавлено: 05.04.2014 22:41
ArkanJR
yars писал(а):
05.04.2014 22:33
Немудрено, если учесть, что ncurses написана именно на С.

Взаимодействие с ncurses можно организовать не только в C, но и во многих других языках (включая Python, Perl и C++)...

Источник

Re: Применение ncurses в С++

Добавлено: 05.04.2014 22:57
yars
ArkanJR
А я разве утверждал, что невозможно использовать ncurses в C++? Вам нужно лишь подключить соответствующий header и вперед. На русском сходу ничего по теме не нагуглил, но на английском есть хотя бы это.

Re: Применение ncurses в С++

Добавлено: 05.04.2014 23:04
ArkanJR
yars писал(а):
05.04.2014 22:57
ArkanJR
А я разве утверждал, что невозможно использовать ncurses в C++? Вам нужно лишь подключить соответствующий header и вперед. На русском сходу ничего по теме не нагуглил, но на английском есть хотя бы это.

Что-то там всё слишком общо. Если Вам несложно, то объясните, пожалуйста, мне на пальцах: как с помощью ncurses в данной программе задать цвет фона - чёрный, цвет сообщений - светло-зелёный, цвет вводимых и выводимых значений - жёлтый?

Re: Применение ncurses в С++

Добавлено: 05.04.2014 23:30
drBatty
ArkanJR писал(а):
05.04.2014 22:15
Почему-то везде используются примеры с синтаксисом С.

а у вас примеры не компилируются? Не работают?

C++ это надмножество C, т.ч. смело пишите на PureC, и собирайте gcc. Можно даже часть файлов писать на C++, а часть на C. Можно и одновременно (хотя это быдлокод).

ArkanJR писал(а):
05.04.2014 23:04
как с помощью ncurses

что сразу с помощью ncurses?
ну сейчас попробую...

Re: Применение ncurses в С++

Добавлено: 05.04.2014 23:44
drBatty
а, понял. Вы хотите использовать STL std::cout, да? Дык это и невозможно, ncurses она работает со своими графическими функциями, и std:: вы можете разве что для файлов использовать, а не для вывода.

т.ч. определяйтесь. Примеры ncurses ищите здесь, я проверил, они работают.

Re: Применение ncurses в С++

Добавлено: 05.04.2014 23:44
ArkanJR
drBatty писал(а):
05.04.2014 23:30
что сразу с помощью ncurses?
ну сейчас попробую...

А каким ещё способом Вы предлагаете задавать цвет фона и текста в C++?

Re: Применение ncurses в С++

Добавлено: 05.04.2014 23:51
drBatty
ArkanJR

Код: Выделить всё

#include <iostream>
using namespace std;
int main()
{
    cout << "\x1B[44mTEST\x1B[0m" << endl;
    return 0;
}


PS: такая ерунда везде работает, в шелле тоже

ArkanJR писал(а):
05.04.2014 23:44
в C++?

ЭТО НЕ C++.
Пишите грамотно, не вводите людей в заблуждение. Вы вместо того, что-бы сказать "я хочу ехать на велосипеде" сказали "я хочу бежать в резинке".

Re: Применение ncurses в С++

Добавлено: 05.04.2014 23:58
ArkanJR
drBatty писал(а):
05.04.2014 23:51
\x1B[44mTEST\x1B[0m

Об этой строке можно поподробней? Просто откуда вопрос возник: заинтересовался темой цветов в С++, порыскал в литературе (Интернет-Университет Информационных Технологий "Введение в языки программирования С и С++"), но там был пример с использованием conio.h, который в gcc отсутствует. В Википедии в статье про conio.h имеется ссылка на Ncurses. Оттуда я и начал копать, как в задать цвета в консольной программе на С++ под linux...

Re: Применение ncurses в С++

Добавлено: 06.04.2014 00:03
drBatty
PS: C++ это развитие C, отличается от C
1. наличием ООП. Т.е. есть не только структуры, но и классы, которые позволяют создавать свои типы данных. Вы можете создать свой тип String, и писать такой код:

Код: Выделить всё

String a = "zzz";
String b = "123";
String c;
c = a + b;
c.print();

напечатает "zzz123". Наверное. А может и нет. От вас зависит.

2. наличием шаблонов. Т.е. можно сделать один шаблон, а потом подставлять в него любые типы(в т.ч. свои из п1). Компилятор сам создаст новый класс(функцию).

Вот благодаря исключительно п2 (НЕ п1!) сделали STL, с кучей шаблонов. В т.ч. и шаблон iostream, для ввода/вывода в файл-поток (stream). В glibc для этого есть fread/printf/fopen и т.п. Ну а шаблон cout -- просто обёртка с симпатичным синтаксисом. Никакого ООП там НЕТ. Т.е. это очень малая часть ЯП. Она даже в стандарт не так давно попала, а до того была как ncurses, просто одной из Over9000 библиотек.

Re: Применение ncurses в С++

Добавлено: 06.04.2014 00:25
drBatty
ArkanJR писал(а):
05.04.2014 23:58
Об этой строке можно поподробней?

http://en.wikipedia.org/wiki/ANSI_escape_code

цвета: http://en.wikipedia.org/wiki/ANSI_escape_code#Colors

используя возможности C++ вы можете сделать свою функцию <<. Вот так:

Код: Выделить всё

#include <iostream>
using namespace std;

enum colors { BBLUE=44, NORMAL=0 };

ostream& operator<<(ostream &os, colors c)
{
    int i = c;
    os << "\x1B[";
    os << i;
    os << "m";
    return os;
}

int main()
{
    cout << BBLUE << "TEST" << NORMAL << endl;
    return 0;
}

Re: Применение ncurses в С++

Добавлено: 06.04.2014 13:33
ArkanJR
Если ещё не сильно надоел, то подскажите пожалуйста, как задать цвет текста для вводимых данных?

Re: Применение ncurses в С++

Добавлено: 06.04.2014 15:09
drBatty
ArkanJR писал(а):
06.04.2014 13:33
как задать цвет текста для вводимых данных?

а вы определились? Если вы хотите делать через ESC коды(0x1B), то просто выведите нужный цвет.

в консоли:

$

echo -ne "\x1B[43m"; read; echo -e "\x1B[0m"