我创建了一个主窗口win
:如何强制刷新诅咒中使用Ruby
win = Curses::Window.new(Curses.lines/2, Curses.cols, 0, 0)
然后,我有时需要创建一个消息窗口,覆盖主要的一个。当我关闭消息窗口,我刷新win
:
win.refresh
但除非我使用像在主窗口中改变什么:
win.addstr("asd")
refresh
不重绘窗口。
有没有办法强制重画窗口?
我创建了一个主窗口win
:如何强制刷新诅咒中使用Ruby
win = Curses::Window.new(Curses.lines/2, Curses.cols, 0, 0)
然后,我有时需要创建一个消息窗口,覆盖主要的一个。当我关闭消息窗口,我刷新win
:
win.refresh
但除非我使用像在主窗口中改变什么:
win.addstr("asd")
refresh
不重绘窗口。
有没有办法强制重画窗口?
这取决于。
这样做使用touchwin
(或任何名称的Ruby绑定可能会发生用于C函数)。
在ruby 2.0.0,所述标准诅咒为Ruby结合缺乏touchwin
和touchline
。奇怪的是,它包含了几个ncurses扩展(resizeterm
,鼠标界面,默认颜色)的绑定,但缺少许多标准功能(请参阅X/Open Curses以供参考)。
在2.4.1中,curses不是标准的Ruby模块,但site for the module确实有touchwin
。
有一种方法Curses::Window#touch
它标记窗口已更改,并将由下一个refresh
重新绘制。还有方法Curses::Window#redraw
,它只是重画窗口。
另一个问题是:getch
方法,它在我的计划是有点不可预测的,如果我使用Curses.getch
- 有时它会导致该窗口不会刷新,有时它会导致整个屏幕上消失...... window对象使用getch
解决问题例如win.getch
你试过'#doupdate'吗?我没有经验'Curses'只是看文档。 – engineersmnky
@engineersmnky否,'#doupdate'不重绘窗口。 – user136379