在 NCurses CDK 矩阵中,单个单元格可以着色吗?

Posted

技术标签:

【中文标题】在 NCurses CDK 矩阵中,单个单元格可以着色吗?【英文标题】:In the NCurses CDK Matrix, can an individual cell be colored? 【发布时间】:2017-04-24 03:24:57 【问题描述】:

我可以通过指定行格式或列格式为单元格着色,但这会将着色/格式应用于整个行或列。我想根据一些标准设置每个单元格的颜色。当我在 setCDKMatrixCell() 调用中包含 ... 着色标签时,这些字符被设置为不用于格式化单元格的单元格文本。

还有其他方法吗?或者关于如何修改 drawCDKMatrixCell 来做到这一点的任何想法?

void drawCDKMatrixCell() 
...

if (matrix->dominant == ROW) 
    highlight = matrix->rowtitle[absolute_row][0] & A_ATTRIBUTES;

else if (matrix->dominant == COL) 
    highlight = matrix->coltitle[col][0] & A_ATTRIBUTES;


/* Draw in the cell info. */
for (x = 1; x <= matrix->colwidths[col]; x++) 
        chtype ch = (((x <= infolen) && !isHiddenDisplayType(disptype))
                     ? (CharOf(MATRIX_INFO(matrix, vrow, vcol)[x - 1]) | highlight)
                     : matrix->filler);


    (void) mvwaddch(cell, 1, x, ch | highlight);

...

【问题讨论】:

【参考方案1】:

使用私有函数绘制单元格

static void drawCDKMatrixCell (CDKMATRIX *matrix,
                               int row,
                               int col,
                               int vrow,
                               int vcol,
                               chtype attr,
                               boolean Box)

它只是对单元格中的每个字符使用mvwaddch。使用该信息设置

int setCDKMatrixCell (CDKMATRIX *matrix, int row, int col, const char *value)

并以char(不是chtype)的形式存储在矩阵中。如果修改了drawCDKMatrixCell 函数,例如使用char2Chtype 来构造数据,那么您可以按照您的要求进行操作。

【讨论】:

感谢您的建议。我包括了我认为负责着色的代码块。您介意指出如何使用 char2Chtype 来设置颜色吗?我的困惑是 b/c 文本是逐个字符写入的,并与“突出显示”进行或运算。不确定它到底是如何工作的。

以上是关于在 NCurses CDK 矩阵中,单个单元格可以着色吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 NCurses CDK 矩阵时,是不是可以在调用 activateCDKMatrix 后更新矩阵?

Python ncurses、CDK、urwid 的区别

在单个单元格中显示页眉页脚和单元格?

我可以将单个自定义单元格用于多个不同的单元格吗?

矩阵中严格递增的单元格数

如何在 CListCtrl 中拆分单个单元格