В настоящее время я работаю над проектом C++, в котором мне нужно отобразить некоторые расширенные символы (wchar_t).Показать wchar_t с помощью ncurses
Основная проблема заключается в том, что, даже если она отлично работает в C (с использованием wprintf
), она не работает в C++ с использованием mvwaddwstr
или waddwstr
. Конечно, я установил такой локаль: 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[].value
- это wchar_t
, а _charMap[].x
- это int, как _charMap[].y
.
Не могли бы вы, возможно, создать [SSCCE] (http://sscce.org/) и показать нам, что вы пробовали? Любой код был бы полезен. –
Я добавил код, который должен работать. – GeoffreyB