在 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 矩阵中,单个单元格可以着色吗?的主要内容,如果未能解决你的问题,请参考以下文章