ncurses несколько цветов на экране

Я хочу сделать меню сncurses.h и более одного цвета. Я имею в виду что-то вроде этого:

<code>┌────────────────────┐
│░░░░░░░░░░░░░░░░░░░░│ <- color 1
│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│ <- color 2
└────────────────────┘
</code>

Но если я используюinit_pair(), attron()а такжеattroff() цвет всего экрана такой же, как я и ожидал.

<code>initscr();

init_pair(0, COLOR_BLACK, COLOR_RED);
init_pair(1, COLOR_BLACK, COLOR_GREEN);

attron(0);
printw("This should be printed in black with a red background!\n");
refresh();

attron(1);
printw("And this in a green background!\n");
refresh()    

sleep(2);

endwin();
</code>

Что не так с этим кодом?

Спасибо за каждый ответ!

Ответы на вопрос(2)

Решение Вопроса

Вот рабочая версия:

#include <curses.h>

int main(void) {
    initscr();
    start_color();

    init_pair(1, COLOR_BLACK, COLOR_RED);
    init_pair(2, COLOR_BLACK, COLOR_GREEN);

    attron(COLOR_PAIR(1));
    printw("This should be printed in black with a red background!\n");

    attron(COLOR_PAIR(2));
    printw("And this in a green background!\n");
    refresh();

    getch();

    endwin();
}

Заметки

тебе нужно позвонитьstart_color() послеinitscr() использовать цвет. ты должен использоватьCOLOR_PAIR макрос для передачи цветовой пары, выделенной с помощьюinit_pair вattron и другие Вы не можете использовать цветовую пару 0. тебе нужно только позвонитьrefresh() один раз, и только если вы хотите, чтобы ваш вывод был виден в этот момент,а такж вы не вызываете функцию ввода какgetch().

Это HOWTO очень помогает.

 Nic Hartley30 нояб. 2017 г., 19:32
@ jorgesaraiva Возможно, потому что в этом нет необходимости? Я имею в виду, конечно, тыможе точно укажите, в какое окно печатать и где вы хотите, но зачем все это, когда поведениеprintw("...\n") делает то, что тебе нужно?
 jorge saraiva29 нояб. 2016 г., 03:26
Вместо printw, почему нельзя mvwprintw ??

Цветная пара0 зарезервировано для цвета по умолчанию поэтому вы должны начать индексирование с1.

....

initscr();
start_color();

init_pair(1, COLOR_BLACK, COLOR_RED);
init_pair(2, COLOR_BLACK, COLOR_GREEN);

attron(COLOR_PAIR(1));
printw("This should be printed in black with a red background!\n");

....

Ваш ответ на вопрос