Рисование линий в курсах - PullRequest
       6

Рисование линий в курсах

4 голосов
/ 10 декабря 2010

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

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

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 10 декабря 2010

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

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


редактировать
У меня есть расплывчатая память о 7-битном или 8-битном режиме для старых проклятий, но я не могу найти упоминания об этом в FSF ncurses 1.190 (2008/12/20), также идентифицированной как v5.7.3.20090207 У меня на линуксе. В справочной странице для 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 голосов
/ 04 июля 2014
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
}
...