在屏幕上获取unicode字符ncurses

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

我在使用

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);
  }
}

我尝试过像这样改变条件:

  1. if (winch(win) == L'\u2588')
  2. if (winch(win) == '█')
  3. if ((winch(win) & A_CHARTEXT) == L'\u2588')
  4. if ((winch(win) & A_CHARTEXT) == '█')

它们都无法正常工作。

c windows gcc mingw ncurses
1个回答
0
投票

winch
仅使用字符的一个字节。 使用
win_wch
表示 Unicode(宽字符),以及
getcchar

© www.soinside.com 2019 - 2024. All rights reserved.