2013-03-05 2 views
1

현재 확장 된 문자 (wchar_t)를 표시해야하는 C++ 프로젝트에서 작업 중입니다. ncurses를 사용하여 wchar_t 표시

가장 큰 문제

, 그것은 mvwaddwstr 또는 waddwstr를 사용하여 C++에서 작동하지 않습니다 그것 ( wprintf 사용) 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_charMap[].y과 같은 int입니다.

+0

당신은 아마도 [SSCCE] (http://sscce.org/)를 만들고 시도 무엇을 우리에게 보여 주시겠습니까? 모든 코드가 도움이 될 것입니다. –

+0

작동해야하는 코드를 추가했습니다. – GeoffreyB

답변

2

을 수행하기 전에 setlocale(LC_ALL, "")앞에을 입력해야합니다.

동작하는 예제 :

#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