2017-06-19 43 views
0

我创建了一个主窗口win如何强制刷新诅咒中使用Ruby

win = Curses::Window.new(Curses.lines/2, Curses.cols, 0, 0) 

然后,我有时需要创建一个消息窗口,覆盖主要的一个。当我关闭消息窗口,我刷新win

win.refresh 

但除非我使用像在主窗口中改变什么:

win.addstr("asd") 

refresh不重绘窗口。

有没有办法强制重画窗口?

+0

你试过'#doupdate'吗?我没有经验'Curses'只是看文档。 – engineersmnky

+0

@engineersmnky否,'#doupdate'不重绘窗口。 – user136379

回答

0

这取决于。

这样做使用touchwin(或任何名称的Ruby绑定可能会发生用于C函数)。

ruby 2.0.0,所述标准诅咒为Ruby结合缺乏touchwintouchline。奇怪的是,它包含了几个ncurses扩展(resizeterm,鼠标界面,默认颜色)的绑定,但缺少许多标准功能(请参阅X/Open Curses以供参考)。

在2.4.1中,curses不是标准的Ruby模块,但site for the module确实有touchwin

0

有一种方法Curses::Window#touch它标记窗口已更改,并将由下一个refresh重新绘制。还有方法Curses::Window#redraw,它只是重画窗口。

另一个问题是:getch方法,它在我的计划是有点不可预测的,如果我使用Curses.getch - 有时它会导致该窗口不会刷新,有时它会导致整个屏幕上消失...... window对象使用getch解决问题例如win.getch