文本的背景颜色溢出到边框符号(c,ncurses)
Background color of text bleeding over to border symbols (c, ncurses)
Window 边框符号采用只有文本才应具有的背景颜色。如果删除了边框符号,文本末尾的背景颜色会被截短,而不是覆盖整个 window 宽度。我缺少什么以及我应该如何解决它?
如果不清楚,由于 Whosebug 一直在唠叨我的细节,我的意图是让每个 window 中文本的背景色覆盖给定 window 的整个宽度线.
#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);
}
要解决这个问题,你需要两个 windows:
- 一个外层window,用来画一个盒子,
- 一个内部window,用于绘制文本
Window 边框符号采用只有文本才应具有的背景颜色。如果删除了边框符号,文本末尾的背景颜色会被截短,而不是覆盖整个 window 宽度。我缺少什么以及我应该如何解决它?
如果不清楚,由于 Whosebug 一直在唠叨我的细节,我的意图是让每个 window 中文本的背景色覆盖给定 window 的整个宽度线.
#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);
}
要解决这个问题,你需要两个 windows:
- 一个外层window,用来画一个盒子,
- 一个内部window,用于绘制文本