连接停止显示颜色;误用init_pair()?

问题描述 投票:0回答:0

在我的程序中,我使用ncurses在屏幕上显示输出(仅在屏幕上的特定位置中的字符,没有高级功能)。以前,它起作用了。我没有安装,卸载,更改任何软件,任何配置。我只更改了代码。

颜色信息使我了解了程序的内部数据结构,因此有助于调试和改进程序。

作为参考,我将this网站用于ncurses。它最大的缺陷是它没有显示各种功能的预期数据类型,也没有有关不同数据片段可接受范围的信息。例如,多少种颜色,几种颜色对...

我的恐惧是我滥用功能init_pair()。 我称之为程序的开头:

initscr (); start_color ( ); noecho ();

我像这样修改了屏幕(许多线未显示):

enum { NORMAL=1, BOX, }; init_pair ( NORMAL , COLOR_WHITE , COLOR_BLACK ); init_pair ( BOX , COLOR_RED , COLOR_BLACK ); attron ( COLOR_PAIR ( BOX ) ); addch ( 'x' ); attroff ( COLOR_PAIR ( NORMAL ) );

尽管对
attroff()
的争论不好,但效果很好。

但是在我的代码中,我需要根据某些数据来确定背景颜色,以及其他一些数据的前景颜色。因此,定义简单的数字颜色对的策略是非直觉的。

我更改为这样的事情:
// foreground colors
#  define FG_NORMAL     ( COLOR_WHITE   )
#  define FG_TARGET     ( COLOR_YELLOW  )

// background colors
#  define BG_OUTSIDE    ( COLOR_BLACK   )
#  define BG_AGAW       ( COLOR_MAGENTA )

init_pair ( 16 * FG_NORMAL + BG_OUTSIDE   , FG_NORMAL , BG_OUTSIDE   );
init_pair ( 16 * FG_TARGET + BG_AGAW      , FG_TARGET , BG_AGAW      );

// decide the actual colors to be used
if ( some__condition  ) { colorBG = BG_AGAW   ; }
if ( other_condition  ) { colorFG = FG_TARGET ; }

theChar = 'x';

addch ( theChar | COLOR_PAIR ( 16 * colorFG + colorBG ) );

在本质上我使用的而不是最后一行:

attron ( COLOR_PAIR ( 16 * colorFG + colorBG ) ); addch ( theChar ); attroff ( COLOR_PAIR ( 16 * colorFG + colorBG ) );

IT

should工作,因为第一个论点仍然适合8位(并且自动类型铸造使其适合任何其他类型)。

,尽管图像虽然正确,但只是简单的黑白,没有颜色。 我正确地猜到问题在于问题是
init_pair()
的第一个参数吗?如果没有,可能是什么问题?

使用调试器使用断点,代码执行了预期的行。
ncurses的文档(质量):我发现

init_pair()的参数不是addch()

,而是一个
char

!因此,我可能已经在例行程序的其他部分击中了类似的东西。

aaaaaaaaially,我成功找到了这个问题。根问题是Ncurses的不良文档。网上的所有位置都在其他地方的复制品中得到了很多复制。其他用户抱怨同一件事。

,在我的具体情况下,我的color_pairs = 64。所以我最初所做的:

short
定义了允许范围以外的一些颜色对。为什么我没有任何颜色,而不是只有一些颜色,这是另一个问题(但不相关的问题)。

我这样将颜色包装成颜色对:

init_pair ( 16 * FG_NORMAL + BG_OUTSIDE , FG_NORMAL , BG_OUTSIDE );

(请注意16到8的变化),我有颜色。

现在我可以很高兴继续调试。
    

c windows ncurses
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.