2013-03-05 1 views
1

В настоящее время я работаю над проектом 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.

+0

Не могли бы вы, возможно, создать [SSCCE] (http://sscce.org/) и показать нам, что вы пробовали? Любой код был бы полезен. –

+0

Я добавил код, который должен работать. – GeoffreyB

ответ

2

Необходимо 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; 
} 
+0

И это решение, большое спасибо чуваку! – GeoffreyB