doupdate()
和 和有什么不一样refresh()
?
似乎refresh ()
可以替换为,但是除非被调用doupdate()
,否则不会出现文本。refresh()
此外,是否refresh()
刷新所有窗口,或者应该refresh()
为面板内的每个窗口调用?
来自 Dan Gookin 的NCurses 程序员指南(第 513 页):
NCurses 中的刷新操作由两部分组成:
- 首先,NCurses 获取窗口中已更改或触摸的那些部分,并将这些部分从窗口数据
结构中写入内存中的虚拟屏幕。- 其次,在终端上显示自上次刷新后触摸的虚拟屏幕的内容。
将信息从窗口数据结构复制到虚拟屏幕是由 wnoutrefresh() 函数执行的。将虚拟屏幕更新到终端由另一个函数 doupdate() 处理。它们一起构成了 refresh() 或 wrefresh() 调用的两个组成部分。
更新多个窗口时,使用 wnoutrefresh() 的优势就来了。在这种情况下,重复调用 wnoutrefresh() 之后再调用一次 doupdate() 比调用一系列 wrefresh() 更有效,而且闪烁更少。
就面板而言,它们是窗口的一种包装器(因此每个面板只有一个窗口)。update_panels()
调用(以面板给出的正确堆叠顺序将窗口写入虚拟屏幕)然后doupdate()
将虚拟屏幕输出到终端就足够了。
如果您想进一步划分面板,请考虑使用子窗口。