在ncurses中绘制线条

时间:2010-12-10 00:46:38

标签: macos osx-snow-leopard ncurses extended-ascii

我一直在尝试在ncurses中进行简单的线条绘制(例如盒子),但是我无法让它工作。我正在尝试打印扩展的ASCII字符,如下所示:http://www.theasciicode.com.ar/ascii-table-codes/ascii-codes-219.html 我已经看过wchar_t的一些提及,但它显然需要ncursesw,我无法弄清楚如何包含(我知道它已安装)

我在OS X 10.6.2和GCC 4.2下使用XCode。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您不需要wchar_t。 “扩展”代码(c.1985)小于255.例如,要绘制双线框的左下角,请使用代码200十进制,310八进制(“\ 310”)或0xc8(“\ xc8 “)。

这些角色需要您正在使用的终端模拟器的支持,但它应该可以正常工作。


修改
对于旧的诅咒,我对7位与8位模式有一个模糊的记忆,但我在FSF 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
...

答案 1 :(得分: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
}