我创建了一个主窗口win
:
win = Curses::Window.new(Curses.lines / 2, Curses.cols, 0, 0)
然后我有时需要创建一个覆盖主要窗口的消息窗口。关闭消息窗口后,我刷新了win
:
win.refresh
但除非我在主窗口中使用以下内容更改任何内容:
win.addstr("asd")
refresh
不会重绘窗口。
有没有办法强制重绘窗口?
答案 0 :(得分:0)
取决于。
使用 touchwin
(或者Ruby绑定可能用于C函数的任何名称)完成。
在ruby 2.0.0中,标准 curses绑定Ruby缺少touchwin
和touchline
。奇怪的是,它包含了几个ncurses扩展(resizeterm
,鼠标接口,默认颜色)的绑定,但缺少许多标准功能(请参阅X/Open Curses以供参考)。
在2.4.1中,curses不是标准的Ruby模块,但site for the module确实有touchwin
。
答案 1 :(得分:0)
有一个方法Curses::Window#touch
,它将窗口标记为已更改并由下一个refresh
重绘。还有方法Curses::Window#redraw
,它只是重绘窗口。
其他问题是getch
方法,如果我使用Curses.getch
,在我的程序中有点不可预测 - 有时会导致窗口不刷新,有时会导致整个屏幕消失...窗口对象上的getch
解决了问题,例如win.getch