刷新行为(nCurses)

时间:2018-11-11 17:59:41

标签: c ncurses

我最近正在研究ncurses,一个疑问刚好打了我:刷新功能到底能做什么?

我进行了一些搜索,阅读了一些教程,甚至是一个文档,我的结论是它以“缓冲屏幕”上完成的格式“刷新”了实际屏幕(它只是更新屏幕上的输出)。

进行一些测试后,我清楚地意识到我是错的,因为显示的输出带有或不带有刷新功能!下面有一个简单的程序,我只是对其进行测试而无法实现此功能的实际功能。

#include <ncurses.h>
#include <string.h>

int main() {
  char mesg[] = "Just a String";
  int row, col;

  initscr();
  getmaxyx(stdscr, row, col);

  while(true) {
    refresh();
    mvprintw(row/2, (col - strlen(mesg))/2, "%s", mesg);

    mvprintw(row-2, 0, "This screen has %d rows and %d columns\n", row, col);

    char c = getch();
    if (c == 'e') { row++; }
    else if (c == 'q') { row--; }
    else if (c == 'a') { col--; }
    else if (c == 'd') { col++; }
  }

  getch();
  endwin();

  return 0;
}

我在整个程序中移动了刷新,删除了它,似乎什么都没有改变。到底是做什么的??

1 个答案:

答案 0 :(得分:0)

getch 函数调用 refresh ,这可能会在您移动显式调用时使您感到困惑 refresh 到其他地方。

光标功能写入虚拟屏幕(即非真实),而 refresh 更新 physical 屏幕(真实一种),将两者进行比较,并进行一些小的更改(如果可能)。