2013-03-05 48 views
1

我目前正在一個C++項目中,我需要顯示一些擴展字符(wchar_t)。顯示wchar_t使用ncurses

主要的問題是,即使它在C中工作正常(使用wprintf),它也不能在C++中使用mvwaddwstrwaddwstr。當然,我已經設置了這樣的語言環境: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

+0

你能可能創建一個[SSCCE(http://sscce.org/),並告訴我們你嘗試過什麼?任何代碼都會有幫助。 – 2013-03-05 11:23:19

+0

我已經添加了一段應該工作的代碼。 – GeoffreyB 2013-03-05 12:13:28

回答

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 2013-03-07 09:30:20