如何在ncurses中重新定义颜色对?

5
标题已经说明了一切,假设我创建了一个这样的颜色对:
init_pair(1, COLOR_RED, COLOR_BLACK);

然后我想重新定义它,就像这样:
init_pair(1, COLOR_GREEN, COLOR_BLUE);

现在这个不起作用了,但是还有其他的函数可以让我这样做吗?或者说,是否有函数可以让我直接使用显式的前景/背景颜色而不使用颜色对?
提前感谢,如果不够清楚,请告诉我。
编辑:尝试后,您可以使用init_pair重新定义颜色对,而我的代码问题则在其他地方。

请注意:如果颜色对已经初始化过,屏幕将会刷新并且所有使用该颜色对的地方都会改变为新的定义。因此,你不能一直使用同一个颜色对,因为任何更改都会影响之前的绘画内容。 - chtenb
1个回答

2
您可以同时定义最多7个颜色对,并按顺序显示它们。如果需要,只需更改数字并刷新即可。例如(我们将使用3),请参见此处以获取包含7个示例的电子打印版。
 #include  <curses.h>

 int COLOR_PAIR (int PAIR_NUMBER)

 init_pair(1, COLOR_GREEN, COLOR_RED);
 init_pair(2, COLOR_GREEN, COLOR_BLUE);
 init_pair(3, COLOR_RED, COLOR_BLUE);

 for (i=1, i <=3, i++){
   attroffset(A_BOLD)
   attrset(COLOR_PAIR(i))
   refresh();
   sleep(1);
}

请注意,如果您有很多对并且第二个颜色始终相同,或者每对中第一个颜色是唯一的,则可以使用attron()函数打开它,例如:attron(COLOR_PAIR(COLOR_BLUE));(在我们的定义中无法使用此方法)。
您可以在这里查看attron的示例。

那么,一旦创建了颜色组合,就没有办法编辑它了吗? - MiJyn
你可以尝试使用 can_change_colour(),但大多数终端不太支持。 - Rachel Gallen
谢谢提供的信息,我已经找到了我的问题的答案,这个问题与这个问题无关(显然你可以重新定义颜色对,这个错误在其他地方)。 - MiJyn
1
请发布如何操作的常见问题解答! - Rachel Gallen
你可以同时定义最多7个颜色对。但这并不一定正确。在我的xterm-256color中,我至少可以定义256个颜色对。 - chtenb
更准确地说,在我的xterm-256color中,常量curses.COLORPAIRS包含数字32767。 - chtenb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接