【问题标题】:C ncurses: outline multiple characters at onceC ncurses:一次勾勒出多个字符
【发布时间】:2021-01-13 22:06:06
【问题描述】:

是否可以同时将A_STANDOUT 属性应用于多个字符?因为下面的方式实在是让人沮丧:

    mvwaddstr(ctrl_win, 1, 2, "W");
    wattroff(ctrl_win, A_STANDOUT);
    mvwaddstr(ctrl_win, 1, 4, "Up");
    wattron(ctrl_win, A_STANDOUT);
    mvwaddstr(ctrl_win, 1, 7, "S");
    wattroff(ctrl_win, A_STANDOUT);
    mvwaddstr(ctrl_win, 1, 9, "Left");
    wattron(ctrl_win, A_STANDOUT);
    // And so on...

我需要显示我的 tui 应用程序的控件,因此此操作非常常见。此外,我希望每个按钮的信息相互对齐,因此使用带有 '\t' 转义字符的单个字符串会很方便。但在这种方法中我不能。怎么办?

【问题讨论】:

    标签: c user-interface interface ncurses curses


    【解决方案1】:

    如果你愿意,你可以编写你自己的'write_str'函数来解释你想要的控制字符:

    void write_str(WINDOW *win, const char *str) {
        while (*str) {
            switch(*str) {
            case '\t': {
                int y, x;
                getyx(win, y, x);
                x = (x + 8) & -8;  // advance to next tabstop
                wmove(win, y, x);
                break;
            case '\016':
                wattron(win, A_STANDOUT);
                break;
            case '\017':
                wattroff(win, A_STANDOUT);
                break;
            default:
                waddch(win, *str); }
            ++str; }
    }
            
    

    【讨论】:

      猜你喜欢
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 2012-03-12
      相关资源
      最近更新 更多