我使用C语言的ncurses lib。我在下面构建子赢:
MainWin - sub1 - sub2
* = mainwin
# = sub1
' ' = sub2
********************
********************
********************
****##########******
****### ####******
****### ####******
****### ####******
****##########******
********************
********************
********************
********************
我按sub1
移动mvwin(sub1 15, 1)
并重新绘制。但主要获胜的sub1
位置未移动且sub1
的位置已移动。结果我有2 sub1
:
********************
********************
********************
****##########******
****### ####******
****### ####******
****### ####******
****##########******
********************
********************
********************
*##########*********
*### ####*********
*### ####*********
*### ####*********
*##########*********
********************
********************
我认为这是复制或残像,但我注意到它是位置问题。我改变了sub1
:
waddstr(sub1, "i am tired")
它改变了2个窗口!
我认为MainWin的sub1
位置未更新。
我在下面添加测试代码:
#include <curses.h>
int main(){
WINDOW * win;
WINDOW * win2;
WINDOW * win3;
initscr();
cbreak();
getch();
win = newwin(40, 40, 1, 1);
wbkgd(win, '@');
wrefresh(win);
getch();
win2 = subwin(win, 10, 10, 2, 2);
wbkgd(win2, '*');
wrefresh(win2);
getch();
win3 = subwin(win2, 5, 5, 3, 3);
wbkgd(win, '@');
wrefresh(win);
doupdate();
mvwin(win2, 10, 10);
doupdate();
touchwin(win2);
doupdate();
redrawwin(win2);
doupdate();
wrefresh(win2);
doupdate();
getch();
waddstr(win2, "what the fuck");
redrawwin(win);
wrefresh(win);
getch();
redrawwin(win2);
wrefresh(win2);
getch();
endwin();
}