代码之家  ›  专栏  ›  技术社区  ›  user3753834

C-Ncurses,窗口不显示/打印

  •  3
  • user3753834  · 技术社区  · 10 年前

    我试着寻找一个解决方案,我只是不知道为什么窗口没有显示。代码相当简单和直接。为什么会这样?我以前问过一个类似的问题,但知道似乎有人能够提供正确的答案,所以我做得有点简单,只包括重要的内容。

    #include <ncurses.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main()
    {
        initscr();
        WINDOW* win;
        int height = 10;
        int width = 40;
        int srtheight = 1;
        int srtwidth = 0;
        win = newwin(height, width, srtheight ,srtwidth);
        mvwprintw(win, height/2,width/2,"First line");
        wrefresh(win);
        getch();
        delwin(win);
        endwin();
    
    
        return 0;
    }
    
    3 回复  |  直到 10 年前
        1
  •  8
  •   Edwin Buck    10 年前

    您忘记调用刷新。

    基本上,您确实在新创建的窗口上调用了刷新,但您忘记了刷新父窗口,因此它从未重新创建。

    #include <ncurses.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        WINDOW* my_win;
        int height = 10;
        int width = 40;
        int srtheight = 1;
        int srtwidth = 1;
        initscr();
        printw("first"); // added for relative positioning
        refresh();  //  need to draw the root window
                    //  without this, apparently the children never draw
        my_win = newwin(height, width, 5, 5);
        box(my_win, 0, 0);  // added for easy viewing
        mvwprintw(my_win, height/2,width/2,"First line");
        wrefresh(my_win);
        getch();
        delwin(my_win);
        endwin();
        return 0;
    }   
    

    按您的预期显示窗口。

        2
  •  5
  •   Thomas Dickey    8 年前

    问题是 getch 刷新标准窗口 stdscr ,覆盖为执行的刷新 win 上一行。如果你打过电话 wgetch(win) 而不是这两条线,它会起作用。

    这样地:

    #include <ncurses.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main()
    {
        initscr();
        WINDOW* win;
        int height = 10;
        int width = 40;
        int srtheight = 1;
        int srtwidth = 0;
        win = newwin(height, width, srtheight ,srtwidth);
        mvwprintw(win, height/2,width/2,"First line");
        /* wrefresh(win); */
        wgetch(win);
        delwin(win);
        endwin();
    
    
        return 0;
    }
    

    进一步阅读:

        3
  •  1
  •   Paul R    10 年前

    你需要打电话给 refresh() 之后 newwin() :

    win = newwin(height, width, srtheight ,srtwidth);
    refresh(); // <<<
    mvwprintw(win, height/2,width/2,"First line");