我正在製作一個ncurses程序,將屏幕分成兩個窗口。頂部屏幕可以接受輸入,通過按'#'它會將所有文本向下移動到底部窗口並擦除頂部窗口。在我的代碼中,我試圖使用copywin()來替換底部窗口,但它不會在第二個窗口中粘貼措辭。這是我有...覆蓋窗口
#include <ncurses.h>
int main(int argc, char *argv[])
{
// Declare variables for windows and sizes
WINDOW *top_win, *bottom_win;
int maxx, maxy, halfy, flag = 0, ch;
// Start curses
initscr();
noecho();
refresh();
// get the max x's and y's
getmaxyx(stdscr, maxy, maxx);
halfy = maxy >> 1;
// Start color
start_color();
init_pair(1, COLOR_BLACK, COLOR_WHITE);
init_pair(2, COLOR_WHITE, COLOR_CYAN);
init_pair(3, COLOR_RED, COLOR_WHITE);
// Make windows
top_win = newwin(halfy, maxx, 0, 0);
wbkgd(top_win, COLOR_PAIR(1));
wrefresh(top_win);
bottom_win = newwin(halfy, maxx, halfy, 0);
wbkgd(bottom_win, COLOR_PAIR(2));
wrefresh(bottom_win);
// Allow functions keys
keypad(top_win, TRUE);
keypad(bottom_win, TRUE);
// while loop to get input
while((ch = getch()) != '`')
{
if(ch == '@')
{
if(flag == 1)
{
flag = 0;
}
else
{
flag = 1;
}
}
else if(ch == '#')
{
//waddstr(bottom_win, "testing");
copywin(top_win, bottom_win, 0, 0, halfy, 0, halfy, maxx, TRUE);
//overwrite(top_win, bottom_win);
//werase(top_win);
}
else if(flag != 1)
{
waddch(top_win, ch | COLOR_PAIR(1));
}
else if(flag == 1)
{
waddch(top_win, ch | COLOR_PAIR(3));
}
wrefresh(top_win);
wrefresh(bottom_win);
}
// end curses
delwin(top_win);
delwin(bottom_win);
endwin();
return 0;
}
我知道我可以使用'#'字符打印到窗口,因爲我的註釋掉,測試語句。我也剛剛嘗試使用覆蓋(),但也沒有工作。我只是把爭論混淆了,還是其他的東西?有任何想法嗎?先謝謝你!
這是很奇怪的。我猜是因爲它在複製所有內容和邊界時存在問題。它的工作原理,並非常感謝你瞭解它!我將不得不深入探討copywin()的參數。 –
是的 - 我懷疑它是與邊框有關的,但'testing'字符串出現在您期望複製的材質出現的地方。正如我所說,我沒有很好的解釋發生了什麼事。我以(10,10)的偏移量開始,並且出現了材料。這導致最小化過程(偏移量2,1和0在10之後嘗試)。如果你想出了一個很好的解釋,請告訴我(例如在這裏發表評論)。 –