NCURSES-pad中的颜色

NCURSES-pad中的颜色,c,ncurses,C,Ncurses,我正在写一份ncurses的申请书,我正在处理PAD中的彩色显示。我在padp中添加了一些文本,颜色属性如下: 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(C

我正在写一份ncurses的申请书,我正在处理PAD中的彩色显示。我在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,0,LINES-1,COLS-1)显示选项卡的一部分时文本打印时没有任何更改。(只是背景有点不同,因为我启动了颜色模式)。恐怕当文本从键盘复制到屏幕时,它不会复制格式,对吗?如果是这样的话,有没有办法做到这一点

谢谢

|||-----编辑------||| 所以,即使我找到了与零不同的键,它也不起作用。我正在用以下内容在便笺簿上打印:

    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)); 
init\u对(3,颜色为红色,颜色为青色);
attron(颜色对(3));

对于(i=0;i颜色对0是特殊的,因为(指)它始终是默认的前景色和背景色:

假定颜色对0在黑色上为白色,但在黑色上为白色 实际上,不管终端在使用颜色之前实现了什么 已初始化。应用程序无法修改它

颜色对有三个组成部分,它们组合形成一个单元格的颜色(请参阅):

  • 背景字符
  • 通过wattron等设置窗口属性
  • 在参数中传递给waddch的视频属性(包括颜色对值)

如果传递了非零颜色对,则后两个会影响结果;否则不会影响结果(使用列表上的前一项)。这些都是窗口操作。函数attron/attron应用于
stdscr
,而不是应用于焊盘或窗口
p
。如果这些更改为
wattron(p,color\u pair(3));
,等等,结果会有所改善。

此摘录自ncurses手册页,表明问题在于使用颜色对0

init_pair例程更改颜色对的定义。它包含三个参数:要更改的颜色对编号、前景色编号和背景色编号。对于便携式应用程序:
第一个参数的值必须介于1和COLOR\u PAIRS-1之间,但如果使用默认颜色(请参见使用默认颜色),则会调整上限以允许在前景和/或背景中使用默认颜色的额外颜色对。“emphasis mine

即使我将配对的键更改为与0不同的值,也没有任何效果。再次,我尝试更改键的编号,但没有任何更改。请参阅编辑。建议刷新pad'prefresh();更改pad的内容后,我想…在定义init_color(3…)之前”需要定义1和2的条目这是将颜色属性包含到字符中的一种方法:“waddch(p,str[i]| color_PAIR(3))”您可能希望在attron()函数之后使用“touchwin()”函数(再次在attoff()之后使用)更新pad属性的函数这实际上是两个问题,因为没有完整的测试程序,所以没有什么要回答的。我不明白,为什么这是两个问题。但我已经让它工作了,所以你是对的,没有什么要回答的。我将粘贴解决方案并关闭该问题。我正在编写解决方案。