文本的背景颜色渗入边框符号(c、ncurses)

问题描述 投票:0回答:2

窗口边框符号拾取只有文本应具有的背景颜色。如果删除边框符号,则文本末尾的背景颜色会被剪短,而不是覆盖整个窗口宽度。我缺少什么以及我应该如何解决它?

如果不清楚,因为 stackoverflow 一直在烦我详细信息,我的目的是让每个窗口中文本的背景颜色覆盖给定行上窗口的整个宽度。

#include <ncurses.h>

typedef struct ncwin
{
    int startx;
    int starty;
    int width;
    int height;
    WINDOW *win;
} ncwin;


WINDOW *create_newwin(int height, int width, int starty, int startx);
void destroy_win(WINDOW *local_win);

int main(int argc, char *argv[])
{   ncwin win[3];
    int ch, i;

    initscr();          /* Start curses mode        */
    cbreak();           /* Line buffering disabled, Pass on
                     * everty thing to me       */
    keypad(stdscr, TRUE);       /* I need that nifty F1     */
    refresh();

    start_color();
    init_pair(1, COLOR_RED, COLOR_BLACK);
    init_pair(2, COLOR_BLUE, COLOR_BLACK);
    init_pair(3, COLOR_GREEN, COLOR_BLACK);

    for (i = 0; i < 3; i++)
    {
        win[i].height = LINES;
        win[i].width =  (COLS / 6) * (i + 1);
        win[i].starty = 0;
        win[i].startx = (i == 0) ? 0 : win[i - 1].startx + win[i - 1].width + 1;
        win[i].win = create_newwin(win[i].height, win[i].width, win[i].starty, win[i].startx);

        wattron(win[i].win, COLOR_PAIR(i + 1));
        wprintw(win[i].win, " hello!\n");
        wattron(win[i].win, COLOR_PAIR(i + 1));
        wrefresh(win[i].win);
    }

    while((ch = getch()) != KEY_F(1));
        
    for (i = 0; i < 3; i++)
        destroy_win(win[i].win);

    refresh();
    endwin();
    return 0;
}

WINDOW *create_newwin(int height, int width, int starty, int startx)
{
    WINDOW *local_win;

    local_win = newwin(height, width, starty, startx);
    box(local_win, 0, 0);
    wrefresh(local_win);

    return local_win;
}

void destroy_win(WINDOW *local_win)
{   
    wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' ');
    wrefresh(local_win);
    delwin(local_win);
}
c ncurses
2个回答
0
投票

要解决这个问题,您需要两个窗口:

  • 一个外窗,用于绘制一个盒子,以及
  • 内部窗口,用于绘制文本

0
投票

嗯,那是因为您两次调用

wattron()
,而不是第二次使用
wattroff()

́\_(ツ)_/́

© www.soinside.com 2019 - 2024. All rights reserved.