在NCurses CDK Matrix中,单个细胞可以着色吗?

时间:2016-12-08 19:09:19

标签: c++ ncurses curses cdk

我可以通过指定行格式或列格式来着色单元格,但是将着色/格式应用于整个行或列。我想根据一些标准设置每个单元格的颜色。当我在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 个答案:

答案 0 :(得分: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来构建数据,那么您可以执行您要求的操作。