ncurses的多颜色在屏幕上(ncurses multi colors on screen)

2019-06-24 06:15发布

我想打一个菜单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();

有什么不对的代码?

感谢每一个答案!

Answer 1:

这里有一个工作版本:

#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_pairattron等。
  • 你不能用颜色对0。
  • 你只需要调用refresh()一次,只有当你想在这一点上可以看出你的输出, 也不会像调用输入功能getch()

这HOWTO是非常有帮助的。



Answer 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");

....


文章来源: ncurses multi colors on screen