【问题标题】:How to print rounded corner with curses/ncurses?如何用curses/ncurses打印圆角?
【发布时间】:2013-10-21 08:59:26
【问题描述】:

我打印了我的第一个 curses 程序。

我突然很好奇 Curses UI 中是否可以使用圆角。 可以画圆角吗?如果它支持 Unicode,并且可以打印一些字符,例如:

  ╭╮ ╰╯(U+256D~2570)

有可能。我应该更改源代码吗...?还是有一些 API 可以更改这些字符?

【问题讨论】:

标签: ncurses curses


【解决方案1】:

ncurses 使用一个表(来自 terminfo/termcap),它告诉 ncurses 如何将“备用”字符集映射到终端的图形字符集。

如果您想更改此设置,您需要更改终端的 terminfo/termcap 条目。

有关 terminfo 文件格式的详细信息,请参阅terminfo man page。尤其是“线条图形”部分。

【讨论】:

    【解决方案2】:

    Ncurses 因为version-5.3 具有设置窗口边框的功能,专门接受宽(unicode)字符,称为:

    int border_set( const cchar_t *ls, const cchar_t *rs, const cchar_t *ts, const cchar_t *bs, const cchar_t *tl, const cchar_t *tr, const cchar_t *bl, const cchar_t *br );
    int wborder_set( WINDOW *win, const cchar_t *ls, const cchar_t *rs, const cchar_t *ts, const cchar_t *bs, const cchar_t *tl, const cchar_t *tr, const cchar_t *bl, const cchar_t *br);
    

    border_set 和 wborder_set 函数在当前或指定窗口的边缘绘制边框。这些函数不会改变光标位置,也不会换行。

    使用cchar_t:

    cchar_t 引用一串宽字符(___source___)

    #define CCHARW_MAX 5
    typedef struct
    {
        attr_t  attr;
        wchar_t chars[CCHARW_MAX];
    }
    cchar_t;
    

    而不是 borderwborder 函数使用的 chtype

    【讨论】:

    • 副手,因为ncurses 5.3
    • 确实,感谢您的收获! (:
    猜你喜欢
    • 2016-06-06
    • 2013-10-22
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多