Ncurses:面板的doupdate()和refresh()之间的区别

时间:2013-02-15 17:05:28

标签: c++ c ncurses

doupdate()refresh()之间有什么区别?

refresh ()似乎可以代替doupdate(),但除非调用refresh(),否则不会显示文字。

此外,refresh()刷新所有窗口,还是应该为每个窗口调用refresh(),这是在面板内?

1 个答案:

答案 0 :(得分:4)

来自Dan Gookin的Programmer's Guide to NCurses(第513页):

  

NCurses中的刷新操作由两部分组成:

     
      
  • 首先,NCurses获取已经改变或触摸的那些窗口部分,并从窗口数据中写出这些部分   结构到内存中的虚拟屏幕。
  •   
  • 其次,自上次刷新以来触摸的虚拟屏幕的内容显示在终端上。
  •   
     

将信息从窗口数据结构复制到虚拟   屏幕由wnoutrefresh()函数执行。更新   到终端的虚拟屏幕由另一个功能处理,   doupdate()。它们一起构成了refresh()或的两个组件   wrefresh()调用。

     

使用wnoutrefresh()的好处来自何时   更新多个窗口。在那种情况下,反复拨打电话   wnoutrefresh()后跟一个单独的doupdate()调用更多   比一系列wrefresh()调用高效,加上它导致更少   闪烁。

就面板而言,它们是窗口的包装(因此每个面板只有一个窗口)。调用update_panels()(按照面板给出的正确堆叠顺序将窗口写入虚拟屏幕),然后doupdate()将虚拟屏幕输出到终端就足够了。

如果您想进一步划分面板,请考虑使用子窗口。