我在ncurses中编写应用程序,我正在处理打击垫中的颜色显示。我在pad p
中添加了一些带有color属性的文本,如下所示:
if(has_colors())
start_color();
init_pair(0, COLOR_GREEN, COLOR_BLACK);
attron(COLOR_PAIR(0));
while( (ch=fgetc(f)) != EOF){
waddch(p,ch);
}
attroff(COLOR_PAIR(0));
fclose(f);
但是当我用prefresh(p,0, 0, 0,0, LINES-1,COLS-1);
显示标签的一部分时,文本打印没有任何变化。 (只有背景有点不同,因为我开始了颜色模式)。我担心当文本从打击垫复制到屏幕时,它不会复制格式,是吗?如果是这样,有什么办法可以做到这一点吗?
谢谢!
||| ----- ------ EDIT ||| 因此,即使我将密钥改为零以外的东西,它也无法工作。我用这个打印到垫子里:
init_pair(3,COLOR_RED,COLOR_CYAN);
attron(COLOR_PAIR(3));
for (i=0;i<str.length();i++){
waddch(p,str[i]);
}
attroff(COLOR_PAIR(3));
和prefresh
之后的文字正常显示。
答案 0 :(得分:0)
颜色对0是特殊的,因为(指manual page)它始终是默认的前景色和背景色:
假设颜色对0在黑色上是白色的,但是 实际上终端在颜色之前实现了什么 已初始化。它不能被应用程序修改。
颜色对有三个组成部分组合形成一个单元格的颜色(见manual page):
如果传递非零颜色对,则后两个会影响结果;否则他们不会(并且使用列表中的前一项)。这些都是 window 操作。 attron / attron函数适用于stdscr
,而不适用于pad或window p
。如果将其更改为wattron(p,COLOR_PAIR(3));
等,则结果会得到改善。
答案 1 :(得分:-1)
这个摘录自ncurses的手册页表明问题是使用颜色对0。
第一个参数的值必须介于 1和COLOR_PAIRS-1 之间,除非使用默认颜色(请参阅use_default_colors),调整上限以允许使用默认值的额外对前景色和/或背景色。 &#34;强调我的