2010-12-10 3 views
3

Я пытаюсь сделать простой рисование линии (например, коробки) в ncurses весь день, но я не могу заставить его работать. Я пытаюсь напечатать расширенные символы ASCII, такие как найденные здесь: http://www.theasciicode.com.ar/ascii-table-codes/ascii-codes-219.html Я видел несколько упоминаний о wchar_t, но, по-видимому, он требует ncursesw, который я не могу понять, как включить (я знаю, что он установлен)Чертеж строки в ncurses

Я использую XCode под OS X 10.6.2 и GCC 4.2.

Любые идеи?

+1

Что среды программирования это в? Я предположил, что C/C++ в моем ответе ниже. – wallyk 2010-12-10 00:54:04

ответ

4

Вам не нужен wchar_t. «Расширенные» коды (в. 1985) составляют менее 255. Например, чтобы нарисовать левый нижний угол двустрочной рамки, используйте код 200 десятичный, 310 восьмеричный («\ 310») или 0xc8 («\ xc8 «).

Эти символы нуждаются в поддержке эмулятора терминала, который вы используете, но он должен работать нормально.


редактировать
У меня есть смутное воспоминание о 7-битном против 8-битном режиме на старых проклятий, но я не могу найти ни одного упоминания о нем в ФФС Ncurses 1,190 (2008/12/20), также обозначенный как v5.7.3.20090207, который у меня есть в Linux. man page for curs_addch упоминает символические константы для рисующих символов, поэтому, возможно, вы должны использовать их вместо буквального рисующих символов:

addch (ACS_ULCORNER); // upper left corner 
for (int j = 0; j < boxwidth-2; ++j) 
    addch (ACS_HLINE); 
addch (ACS_URCORNER); // upper right 
... 
+0

Когда я пытаюсь это сделать, ncurses просто рисует вопросительные знаки. (Я использую C, кстати. Plain ol 'C) – denizen 2010-12-10 00:58:28

0
void boxAround(int y, int x, int h, int w) { 
    move(y, x); 
    addch (ACS_ULCORNER); // upper left corner 
    int j; 
    for (j = 0; j < w; ++j) 
     addch (ACS_HLINE); 
    addch (ACS_URCORNER); // upper right 

    for(j = 0; j < h; ++j) { 
      move( y+1+j, x); 
      addch (ACS_VLINE); 
      move(y+1+j, x+w+1); 
      addch (ACS_VLINE); 
    } 

    move(y+h+1,x); 
    addch (ACS_LLCORNER); // lower left corner 

    for (j = 0; j < w; ++j) 
     addch (ACS_HLINE); 
    addch (ACS_LRCORNER); // lower right 
} 
Смежные вопросы