如果我使用chtype
(字符的ncurses容器对象)打印字符,只指定像COLOR_PAIR(SOME_PAIR)
这样的颜色,我会得到两个颜色字符。使用' ' | COLOR_PAIR(SOME_PAIR)
,即与字符进行OR运算,我只得到一个,就像我预期的那样。
自己尝试(使用-lncurses
构建):
#include <ncurses.h>
#define RED 1
int main(void)
{
initscr();
start_color();
curs_set(0);
init_pair(RED, COLOR_RED, COLOR_RED);
printw("Multiple: ");
addch(COLOR_PAIR(RED));
printw("\t\tSingle: ");
addch(' ' | COLOR_PAIR(RED));
getch();
endwin();
}
那里发生了什么? addch
如何操纵多个角色?
答案 0 :(得分:0)
chtype
包含字符和属性数据。将chtype
设置为COLOR_PAIR(COLOR_RED)
,您可以设置属性数据,而不是字符数据,从而有效地将字符数据初始化为0
。
在ASCII字符集中,字符代码0
对应于NULL字符,通常用于终止C中的字符串。
现在,要意识到它是一个不可打印的字符,因此在文本表示中用两个字符表示:^@
。
addch
和朋友在比您在终端中获得的字段更高的抽象级别上操作,他们对字符进行操作,包括不可打印的字符。
来自man curs_addch
:
如果
ch
是任何[非空白]控制字符,则会在^X
中绘制 符号。 添加控制字符后调用winch
不会返回 字符本身,但返回控制字符的^
- 表示。
由于ncurses看到COLOR_PAIR(RED)
包含字符代码0
,ncurses会将其解释为不可打印的字符并相应地打印出来,中的一个字符字段。