我想打一个菜单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();
有什么不对的代码?
感谢每一个答案!
这里有一个工作版本:
#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是非常有帮助的。
您需要初始化颜色,并使用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");
....