首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NCURSES - pad中的颜色

NCURSES - pad中的颜色
EN

Stack Overflow用户
提问于 2015-05-20 17:05:36
回答 2查看 559关注 0票数 0

我正在写一个ncurses的应用程序,我正在处理pads中的颜色显示。我将一些文本添加到pad p中,颜色属性如下:

代码语言:javascript
复制
    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中:

代码语言:javascript
复制
    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之后的文本显示正常。

EN

回答 2

Stack Overflow用户

发布于 2015-05-21 05:45:06

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

颜色对0假定为黑底白,但实际上是在颜色初始化之前终端实现的任何颜色。它不能被应用程序修改。

颜色对有三个组成部分,它们组合在一起形成细胞的颜色(请参阅manual page):

通过wattron等设置的

  • 背景视频属性。
  • 视频属性(包括COLOR_PAIR值)传入参数waddch。

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

票数 0
EN

Stack Overflow用户

发布于 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),则调整上限以允许在前景和/或背景中使用默认颜色的额外颜色对。“重点是我的

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30345083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档