【问题标题】:Is ncurses possible to change only foreground color?ncurses 是否可以仅更改前景色?
【发布时间】:2021-08-15 13:34:16
【问题描述】:

下面的代码只能改变带有颜色的属性。

init_color(1, 255);
init_color(2, 1);
init_pair(1, 1, 2);

attron(COLOR_PAIR(1)); // only change the pair of foreground and background color
addstr("aaa");

attron(A_BOLD); // only change the attribute
addstr("aaa");

attrset(COLOR_PAIR(1)|A_BOLD); // change both

我想知道我们是否可以只更改前景色,但保留背景色。

attron_fg(BACKGROUND_YELLOW); // only change the foreground color
addstr("aaa");

【问题讨论】:

    标签: c ncurses curses


    【解决方案1】:

    不,你不能。

    Ncurses 基于每个屏幕位置都有一个颜色对的模型。可能的颜色对在一个索引数组中,它是 ncurses 存储在其屏幕表示中的数组索引。所以你只能指定一个颜色对。

    此外,由于一切都基于索引数组,因此更改颜色或颜色对的定义可能会更改先前绘制的字符的显示颜色。

    这个模型可能有点烦人,但它是 ncurses 设计的基础,所以如果你想使用 ncurses,你需要适应这个模型。

    从历史上看,出于基本相同的原因(内存有限),存在基于相同型号的硬件终端。如今,此类终端大多仅限于博物馆,但 ncurses 和其他 unix 终端处理基础设施继续迎合这样一个世界,在这个世界中,各种外部终端各有其独特的设施和局限性。

    如今,相同的模型用于补偿各种不同终端仿真器对终端控制序列的不同实现。但它仍然适用(或可能适用)连接到嵌入式设备的控制台。

    这是一种解释,既不是借口也不是理由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多