我在C语言的ncurses中使用init_color();
来尝试定义新的RGB颜色值。但是,一旦运行程序,init_color();
不会生效并更改默认颜色。
我尝试在init_color();
语句和init_pair();
之前和之后移动start_color();
语句,但是没有运气。我还尝试使用不同的值(ASCII和其他来源的数字)代替ex。 COLOR_MAGENTA
,用于init_color();
语句之一中的第一个参数,但也没有运气。我的start_color();
,init_color();
和init_pair();
语句都在程序其余部分之前的主函数中。我的终端(使用cloud9 / cs50)支持256种颜色(使用终端命令检查)。同样,所有颜色定义都在“ main”函数上方。
int main(int argc, char *argv[])
{
// ensure that number of arguments is as expected
if (argc != 1)
{
fprintf(stderr, "Usage: ./lemonade\n");
return 1;
}
// start up ncurses
if (!startup())
{
fprintf(stderr, "Error starting up ncurses\n");
return 2;
}
// initialize colors
start_color();
// re-asign specific RGB value to colors
init_color(COLOR_MAGENTA, 254, 160, 207);
init_color(COLOR_GREEN, 37, 244, 82);
init_color(COLOR_BLUE, 96, 82, 186);
// used cyan for a different greeen
init_color(COLOR_CYAN, 46, 243, 74);
// used yellow for a grey
init_color(COLOR_YELLOW, 156, 156, 156);
// used red for a purple
init_color(COLOR_RED, 208, 196, 253);
// initilaize color pairs
init_pair(LOGO_PAIR, COLOR_MAGENTA, COLOR_GREEN);
init_pair(DRAWBORDERSSPECIAL_PAIR, COLOR_BLACK, COLOR_GREEN);
init_pair(BORDERS_PAIR, COLOR_WHITE, COLOR_BLACK);
init_pair(SPECIALNEXT_PAIR, COLOR_BLACK, COLOR_GREEN);
init_pair(SUNNYBLUE_PAIR, COLOR_WHITE, COLOR_BLUE);
init_pair(WEATHERGREEN_PAIR, COLOR_WHITE, COLOR_CYAN);
init_pair(CLOUDYGREY_PAIR, COLOR_WHITE, COLOR_YELLOW);
init_pair(HOTPURPLE_PAIR, COLOR_WHITE, COLOR_RED);
// clean
clean(); // clean includes (refresh(); and clear();)
// draw borders
drawborders();
// run screen 1
screenone();
// support color test
mvprintw(6, 50, "My terminal supports %d colors.", COLORS);
// has_color(); test
if (has_colors() == FALSE)
{
mvprintw(7, 50, "Your terminal does not support color \n");
}
// can_change_color(); test
if (can_change_color() == FALSE)
{
mvprintw(8, 50, "Can_change_color is false \n");
}
我希望init_color();
语句会生效并将默认颜色(例如洋红色,黑色等)更改为新分配的特定RGB值,但是程序运行后它们将保持不变。
我对支持的颜色数量has_colors();
和can_change_color();
添加了检查。支持的颜色数返回8,has_colors();
返回true,最后can_change_color();
返回false。感谢您提出使用has_colors();
和can_change_color();
的建议,尽管这似乎是个问题,但我不确定从何处去?
答案 0 :(得分:0)
嗯,我看不到您对has_colors()
和can_change_color()
的呼叫,应该用来检测您是否甚至允许 在系统上执行此操作?< / p>
这是您应检查的第一内容。可能是您的环境中不允许 更改颜色。