Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ncurses:刷新非重叠窗口将刷新整个屏幕。如何避免这种情况?_C_Unix_Ncurses - Fatal编程技术网

Ncurses:刷新非重叠窗口将刷新整个屏幕。如何避免这种情况?

Ncurses:刷新非重叠窗口将刷新整个屏幕。如何避免这种情况?,c,unix,ncurses,C,Unix,Ncurses,我正在破解一个使用5个窗口的ncurses应用程序: 状态栏窗口-1 X列位于屏幕底部的右侧 标题栏窗口-屏幕顶部有1个COLS 3个内容窗口-行-2个列,位于状态栏和标题栏之间 请注意,有3个内容窗口,它们彼此完全重叠。我正在手动决定重新绘制哪个。标题栏和状态栏窗口不与任何其他窗口重叠 一个用例是用户使用其中一个内容窗口中的菜单选择要上载到网络守护进程的文件。选择文件后,状态栏将充当原始进度栏,绘制一些散列以指示文件已上载的距离 这归结起来就是使用: wclear(地位) mvwprin

我正在破解一个使用5个窗口的ncurses应用程序:

  • 状态栏窗口-1 X列位于屏幕底部的右侧
  • 标题栏窗口-屏幕顶部有1个COLS
  • 3个内容窗口-行-2个列,位于状态栏和标题栏之间
请注意,有3个内容窗口,它们彼此完全重叠。我正在手动决定重新绘制哪个。标题栏和状态栏窗口不与任何其他窗口重叠

一个用例是用户使用其中一个内容窗口中的菜单选择要上载到网络守护进程的文件。选择文件后,状态栏将充当原始进度栏,绘制一些散列以指示文件已上载的距离

这归结起来就是使用:

  • wclear(地位)
  • mvwprintw(状态,…)
  • (身份);
这是可行的,但由于某种原因,导致整个屏幕被重新绘制,造成可怕的闪烁混乱。看过手册后,我不明白为何会这样;只要状态栏不与任何其他窗口重叠,重新绘制状态栏不应导致整个屏幕重新绘制

我是对的,还是误解了?有没有办法防止这种情况

代码如下:

请注意,该代码远未完成,并且缺少润色=)


我的ncurses实现是OpenBSD的实现。

来自wclear手册页:

clear和wclear例程类似于erase和werase,但它们也 调用clearok,以便在下次调用时完全清除屏幕 重新粉刷那扇窗户,从头开始重新粉刷


你能写一个很短的独立程序来演示这种行为吗?你在哪个终端运行这个?请注意,某些终端可能功能有限,因此需要重新绘制整个屏幕,而其他终端可能没有。这样做,我看到了违规者。wclear()似乎会导致整个屏幕更新!没有它,我是自由的。为什么会这样?