Я делаю программу с 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;
}
Я знаю, что может напечатать к окну, используя символ «#» из-за мое закомментированным, тестирование заявления. Я также просто попытался использовать overwrite(), но это тоже не сработало. Я просто перепутаю аргументы, или это что-то еще? Есть идеи? Заранее спасибо!
Это действительно странно .. Я думаю, потому что это проблема с копированием всего и границ. Он работает и благодарит вас за это! Мне придется больше копаться в аргументах copywin(). –
Да, я подозреваю, что это связано с границами, но строка 'testing' появляется там, где вы ожидаете появления скопированного материала. Как я уже сказал, у меня нет хорошего объяснения того, что происходит. Я начал с смещений (10, 10) и получил материал. Это приводит к процессу минимизации (смещения 2, 1, 0 пробовали после 10). Если вы придумаете хорошее объяснение, сообщите мне (комментарий здесь, например). –