文本的背景颜色溢出到边框符号c,ncurses

问题描述

窗口边框符号选取只有文本应具有的背景颜色。如果删除了边框符号,则文本末尾的背景颜色会被剪短,而不是覆盖整个窗口宽度。我错过了什么,我应该如何修复它?

如果不清楚,因为 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 startx)
{
    WINDOW *local_win;

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

    return local_win;
}

void destroy_win(WINDOW *local_win)
{   
    wborder(local_win,' ',' ');
    wrefresh(local_win);
    delwin(local_win);
}

解决方法

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

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