【问题标题】:Display wchar_t using ncurses使用 ncurses 显示 wchar_t
【发布时间】:2013-02-19 18:36:24
【问题描述】:

我目前正在处理一个需要显示一些扩展字符 (wchar_t) 的 C++ 项目。

主要问题是,即使它在 C 中运行良好(使用 wprintf),在使用 mvwaddwstrwaddwstr 的 c++ 中也无法运行。当然,我已经设置了这样的语言环境:setlocale(LC_ALL, "");,但没有显示任何内容。

以前有人遇到过这个问题吗,或者对此有所了解?

谢谢。

代码如下:

  struct charMap { int x; int y; wchar_t value };
  int                   i, x, y;
  wchar_t               str[2];
  struct charMap _charMap[2] = {
    {0,0,9474}
    {29, 29, 9474}
  };
  initscr();
  setlocale(LC_ALL, "");
  for (y = 0 ; y < 30 /* length */ + 2 ; y++) {
    for (x = 0 ; x < 30 /* width */ + 2; x++) {
      for (i = 0 ; i < 2 ; i++) {
        if ((x == _charMap[i].x || _charMap[i].x == -1) &&
            (y == _charMap[i].y || _charMap[i].y == -1)) {
          str[0] = _charMap[i].value;
          str[1] = L'\0';
          mvwaddwstr(stdscr, y, x, str);
          break;
        }
      }
    }
  }
  refresh();
  while(1);

_charMap 是一个结构表,其中包含有用的值以便于比较(避免繁重的if ... else if ... else 结构)。 _charMap[].valuewchar_t_charMap[].x 是 int,如 _charMap[].y

【问题讨论】:

  • 您能否创建一个SSCCE 并向我们展示您的尝试?任何代码都会有所帮助。
  • 我添加了一段应该可以工作的代码。

标签: c++ ncurses wchar-t


【解决方案1】:

你需要setlocale(LC_ALL, "")之前initscr()

一个工作示例:

#include <ncursesw/ncurses.h>
#include <locale.h>
#include <wchar.h>

int main() {  
    setlocale(LC_ALL, "");
    initscr();
    wchar_t wstr[] = { 9474, L'\0' };
    mvaddwstr(0, 0, wstr);
    refresh();
    getch();
    endwin();
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2016-11-11
    • 2021-08-15
    相关资源
    最近更新 更多