我在使用
winch()
从屏幕上获取 U+2588 █ 字符时遇到问题。
假设我有一个名为
win
的窗口,它看起来像这样:
###████###
我想重新绘制所有 # 个字符并应用新属性并忽略 █ 个字符。不知怎的,我无法做到这一点,因为
if (winch(win) == ACS_BLOCK)
检查经常失败。
对于任何寻找完整代码的人,这里是:
void highlight_tile(const Program *program, const int row, const int col) {
wmove(program->board->win, TILE_HEIGHT * row + 1, TILE_WIDTH * col + 1);
for (int i = 0; i < TILE_HEIGHT; i++) {
for (int j = 0; j < TILE_WIDTH; j++) {
if (winch(program->board->win) != ACS_BLOCK) {
if ((row + col) % 2 == 0) {
wattron(program->board->win, SELECTION);
wprintw(program->board->win, "#");
wattroff(program->board->win, SELECTION);
} else {
wattron(program->board->win, SELECTION);
wprintw(program->board->win, "~");
wattroff(program->board->win, SELECTION);
}
}
}
wmove(program->board->win, getcury(program->board->win) + 1, getcurx(program->board->win) - TILE_WIDTH);
}
}
我尝试过像这样改变条件:
if (winch(win) == L'\u2588')
if (winch(win) == '█')
if ((winch(win) & A_CHARTEXT) == L'\u2588')
if ((winch(win) & A_CHARTEXT) == '█')
它们都无法正常工作。