我正在写一个ncurses的应用程序,我正在处理pads中的颜色显示。我将一些文本添加到pad p中,颜色属性如下:
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);显示选项卡的一部分时,文本将不作任何更改地打印出来。(只有背景有点不同,因为我启动了彩色模式)。我担心当文本从pad复制到屏幕时,它不会复制格式,对吗?如果是这样的话,有没有办法做到这一点?
谢谢!
||-EDIT-|所以即使我使用非零的密钥,它也不起作用。我用下面的代码打印到pad中:
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之后的文本显示正常。
发布于 2015-05-21 05:45:06
颜色对0是特殊的,因为(指的是manual page)它始终是默认的前景和背景颜色:
颜色对0假定为黑底白,但实际上是在颜色初始化之前终端实现的任何颜色。它不能被应用程序修改。
颜色对有三个组成部分,它们组合在一起形成细胞的颜色(请参阅manual page):
通过wattron等设置的
如果传递了非零色对,则后两个参数会影响结果;否则它们不会影响结果(并且使用列表中的前一项)。这些都是窗口操作。功能attron/attron适用于stdscr,而不是焊盘或窗口p。如果将这些更改为wattron(p,COLOR_PAIR(3));等,结果将会得到改善。
发布于 2015-05-22 00:47:12
ncurses的手册页中的这段摘录表明问题出在使用颜色对0。
init_pair例程更改颜色对的定义。它有三个参数:要更改的颜色对的编号、前景颜色编号和背景颜色编号。对于便携应用程序:
第一个参数的值必须介于-1\f25 1 -1\f6和-1\f25 color _ pairs 1\f25-1\f6之间,但如果使用默认颜色(参见-1\f25 use_default_colors-1\f6),则调整上限以允许在前景和/或背景中使用默认颜色的额外颜色对。“重点是我的
https://stackoverflow.com/questions/30345083
复制相似问题