【问题标题】:Ncurses: Difference between doupdate() and refresh() for panelsNcurses:面板的 doupdate() 和 refresh() 之间的区别
【发布时间】:2013-02-15 17:05:27
【问题描述】:

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

似乎refresh () 可以替换doupdate(),但是除非调用refresh(),否则不会出现文本。

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

【问题讨论】:

    标签: c++ c ncurses


    【解决方案1】:

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

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

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

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

    使用 wnoutrefresh() 的优势在于 更新多个窗口。在这种情况下,反复调用 wnoutrefresh() 后跟一个 doupdate() 调用更多 比一系列 wrefresh() 调用更有效,而且它导致更少 闪烁。

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

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

    【讨论】:

    • 非常感谢您的回答。清理了很多东西!
    猜你喜欢
    • 2018-10-07
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多