Ncurses 擦除 window 当我不想要它
Ncurses erasing window when I don't want it to
我有两个 windows,一个在顶部,一个在底部(我稍后会在这两个 windows 之间添加第三个 window) .我为底部 window 画了一条水平线,然后我开始画顶部 window,底部 window 被擦掉了!
构造函数 display()
被自动调用,函数 displayMessage()
被我的代码调用。
这是 display()
的代码:
display::display()
{
//initialize window
initscr(); //start curses mode
cbreak(); //Disable line buffering
curs_set(0); //Don't show curser
refresh(); //Now refresh screen
//setup bottom bar
bottomBar = newwin(2, 80, 22, 0); //create new window
whline(bottomBar, '_', 80); //draw line
wrefresh(bottomBar); //refresh
//setup top bar
topBar = newwin(0, 80, 0, 0); //create new window
wattron(topBar, A_UNDERLINE); //text is to be underlined
}
这是 displayMessage()
的代码:
void display::displayMessage(string message)
{
//do some other necessary stuff
int length = message.length(); //get length of message
wmove(topBar, 0, 0); //move curser back to beginning
//getch();
wrefresh(topBar); //refresh
//getch();
whline(topBar, '_',80); //draw line for bottom
//getch();
wmove(topBar, 0, 40 - length/2 - 1); //move cursor to center text
wprintw(topBar,message.c_str()); //print message
wrefresh(topBar); //refresh
}
另外这里是调用这两个的代码片段:
//initialize stuff
pomodoro instance;
while(true) //loop forever, or until user
{
for (int i = 0; i < 3; i++) //loop thru 4 pomodoros
{
//work
instance.Display.displayMessage("**Time to work!**");
instance.playAlarm();
//waitForUser();
//timer(config.workTime);
//break
return 0; //doing development right now
这一行有问题:
topBar = newwin(0, 80, 0, 0); //create new window
因为第一个参数为零。 manual page 说明:
If either nlines or ncols is zero, they default to
LINES - begin_y
and
COLS - begin_x
.
因此零参数使您的 windows 重叠(很多)。
我有两个 windows,一个在顶部,一个在底部(我稍后会在这两个 windows 之间添加第三个 window) .我为底部 window 画了一条水平线,然后我开始画顶部 window,底部 window 被擦掉了!
构造函数 display()
被自动调用,函数 displayMessage()
被我的代码调用。
这是 display()
的代码:
display::display()
{
//initialize window
initscr(); //start curses mode
cbreak(); //Disable line buffering
curs_set(0); //Don't show curser
refresh(); //Now refresh screen
//setup bottom bar
bottomBar = newwin(2, 80, 22, 0); //create new window
whline(bottomBar, '_', 80); //draw line
wrefresh(bottomBar); //refresh
//setup top bar
topBar = newwin(0, 80, 0, 0); //create new window
wattron(topBar, A_UNDERLINE); //text is to be underlined
}
这是 displayMessage()
的代码:
void display::displayMessage(string message)
{
//do some other necessary stuff
int length = message.length(); //get length of message
wmove(topBar, 0, 0); //move curser back to beginning
//getch();
wrefresh(topBar); //refresh
//getch();
whline(topBar, '_',80); //draw line for bottom
//getch();
wmove(topBar, 0, 40 - length/2 - 1); //move cursor to center text
wprintw(topBar,message.c_str()); //print message
wrefresh(topBar); //refresh
}
另外这里是调用这两个的代码片段:
//initialize stuff
pomodoro instance;
while(true) //loop forever, or until user
{
for (int i = 0; i < 3; i++) //loop thru 4 pomodoros
{
//work
instance.Display.displayMessage("**Time to work!**");
instance.playAlarm();
//waitForUser();
//timer(config.workTime);
//break
return 0; //doing development right now
这一行有问题:
topBar = newwin(0, 80, 0, 0); //create new window
因为第一个参数为零。 manual page 说明:
If either nlines or ncols is zero, they default to
LINES - begin_y
andCOLS - begin_x
.
因此零参数使您的 windows 重叠(很多)。