我想制作一个包含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();
这段代码出了什么问题?
感谢您的每一个答案!
答案 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
等。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");
....