【问题标题】:Line Drawing in ncursesncurses中的线条绘制
【发布时间】:2010-12-10 00:46:37
【问题描述】:

我整天都在尝试在 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。

有什么想法吗?

【问题讨论】:

  • 这是在什么编程环境中?我在下面的回答中假设了 C/C++。

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


【解决方案1】:

你不需要 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
...

【讨论】:

  • 当我尝试这个时,ncurses 只会画问号。 (顺便说一下,我使用的是 C。普通的 C)
  • 是的,我检查了我的终端;我可以将扩展的 ascii 粘贴到其中。
  • 嗯,这让我更接近一点;画线常量显示为 Qs,与此问题一致:invisible-island.net/ncurses/ncurses.faq.html#no_line_drawing。这似乎是由于终端不兼容,但我已经在它 Terminal.app 以及 xterm 中尝试过,但都不起作用。
  • 环境变量TERM的值是多少?在我的系统上是xterm
  • 我有 xterm-color|nxterm|generic color xterm 用于 Terminal.app。
【解决方案2】:
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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多