Curses.h的subwin是mvwin()的奇怪举动!

时间:2014-05-30 01:24:27

标签: c ncurses curses

我使用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();
}

0 个答案:

没有答案