Ncurses:刷新不重叠的窗口会刷新整个屏幕。怎么避免这个?

时间:2012-01-08 12:07:17

标签: c unix ncurses

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

  • 状态栏窗口 - 1 X COLS就在屏幕底部。
  • 标题栏窗口 - 1 X COLS就在屏幕顶部。
  • 3个内容窗口 - LINES - 2个X COLS,位于状态栏和标题栏之间。

请注意,有3个内容窗口,它们完全相互重叠。我手动决定要重绘哪个。标题栏和状态栏窗口不与任何其他窗口重叠。

一个用例是用户使用其中一个内容窗口中的菜单选择要上传到网络守护程序的文件。选择文件后,状态栏将作为原始进度条,绘制一些哈希值以指示文件的上传距离。

这归结为使用:

  • wclear(状态);
  • mvwprintw(status,...);
  • wrefresh(状态);

这样可行,但由于某种原因导致整个屏幕被重绘,导致可怕的闪烁乱七八糟。阅读手册后,我看不出为什么会这样;只要状态栏不与任何其他窗口重叠,重绘状态栏不应该导致整个屏幕重绘?

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

代码在这里: https://github.com/vext01/hgd/blob/master/nchgdc.c#L812

请注意,代码很大程度上未完成且缺乏润色=)

我的ncurses实现是OpenBSD的实现。

1 个答案:

答案 0 :(得分:0)

来自wclear手册页:

  

清晰明确的惯例就像擦除和擦除,但它们也是如此          调用clearok,以便在下次通话时完全清除屏幕          为那个窗口刷新并重新粉刷。