NCURSES - 垫中的颜色

时间:2015-05-20 09:05:36

标签: c ncurses

我在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之后的文字正常显示。

2 个答案:

答案 0 :(得分:0)

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

  

假设颜色对0在黑色上是白色的,但是   实际上终端在颜色之前实现了什么   已初始化。它不能被应用程序修改。

颜色对有三个组成部分组合形成一个单元格的颜色(见manual page):

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

如果传递非零颜色对,则后两个会影响结果;否则他们不会(并且使用列表中的前一项)。这些都是 window 操作。 attron / attron函数适用于stdscr,而不适用于pad或window p。如果将其更改为wattron(p,COLOR_PAIR(3));等,则结果会得到改善。

答案 1 :(得分:-1)

这个摘录自ncurses的手册页表明问题是使用颜色对0。

init_pair例程更改了颜色对的定义。它需要三个参数:要更改的颜色对的编号,前景颜色编号和背景颜色编号。对于便携式应用:

第一个参数的值必须介于 1和COLOR_PAIRS-1 之间,除非使用默认颜色(请参阅use_default_colors),调整上限以允许使用默认值的额外对前景色和/或背景色。 &#34;强调我的