ncurses在屏幕上的多种颜色

时间:2012-05-07 18:29:29

标签: c command-line window ncurses

我想制作一个包含ncurses.h和多种颜色的菜单。 我的意思是这样的:

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

但如果我使用init_pair()attron()attroff(),整个屏幕的颜色都是相同的,而不是我想象的那样。

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();

这段代码出了什么问题?

感谢您的每一个答案!

2 个答案:

答案 0 :(得分:21)

这是一个有效的版本:

#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()一次,并且只有当您希望在那时看到输出时,才会调用{{1}之类的输入函数}。

This HOWTO非常有用。

答案 1 :(得分:2)

您需要初始化颜色并使用COLOR_PAIR宏。

默认颜色保留颜色对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");

....